Ger*_*los 34 javascript angularjs
我有一个非常愚蠢的问题.考虑以下:
vm.feed = getFeed().then(function(data) {return data;});
Run Code Online (Sandbox Code Playgroud)
getFeed() 返回成功解析的$ q延迟承诺(我在角上).
我的目标是将vm.feed设置为等于成功回调返回的数据值.就像现在一样,代码只是将vm.feed赋予等于$promise返回的对象getFeed().
我知道我可以简单地做:vm.feed = data在已解决的函数内部,但我想理解为什么这段代码不能正常工作.
PD:promise正确解析,即使在解析后,vm.feed仍然等于Promise,而不是数据.我在+10秒后复制了console.log的vm.feed:
Promise {$$state: Object} $$state: Objectstatus:1 value: Object
Run Code Online (Sandbox Code Playgroud)
Promise对象中的value属性包含我想要分配给vm.feed(ei data)的promise的实际解决方案.
谢谢!
Sol*_*tos 20
可以使用箭头功能将其更新为ES6,如下所示:
getFeed().then(data => vm.feed = data);
Run Code Online (Sandbox Code Playgroud)
如果你想使用async function,你也可以这样做:
async function myFunction(){
vm.feed = await getFeed();
// do whatever you need with vm.feed below
}
Run Code Online (Sandbox Code Playgroud)
Nat*_*han 19
您的发言确实没有什么比要求解释分配从返回的值更多then()的vm.feed变数.then()给你一个Promise(你可以在这里看到:https://github.com/angular/angular.js/blob/master/src/ng/q.js#L283).你可以通过看到Promise(一个简单的对象)被拉出函数并被分配给你来描绘这一点vm.feed.一旦解释器执行该行,就会发生这种情况.
由于成功回调在您调用时不会运行,then()但只有当您的promise得到解决时(稍后,异步),才能then()为调用者返回其值.这是Javascript的默认方式.这是Promises引入的确切原因,因此您可以要求解释器以回调的形式将值推送给您.
虽然正在为JavaScript工作的未来版本(ES2016)中引入了几个关键字,但正如您现在所期望的那样.好消息是,您可以通过从ES2016转发到当前广泛支持的版本(ES5),开始编写这样的代码.
有关该主题的精彩介绍,请访问:https://www.youtube.com/watch?v = lil4YCCXRYc
要立即使用它,您可以通过Babel转换代码:https://babeljs.io/docs/usage/experimental/ (通过运行--stage 1).
您还可以在此处查看一些示例:https://github.com/lukehoban/ecmascript-asyncawait.
Bha*_*avO 10
该then()方法返回一个Promise.它需要两个参数,都是Promise成功和失败案例的回调函数.promise对象本身并不直接为您提供已解析的数据,此对象的接口仅通过提供的回调提供数据.所以,你必须这样做:
getFeed().then(function(data) { vm.feed = data;});
Run Code Online (Sandbox Code Playgroud)
该then()函数返回带有前一个then()回调的已解析值的promise ,允许您将值传递给后续回调:
promiseB = promiseA.then(function(result) {
return result + 1;
});
// promiseB will be resolved immediately after promiseA is resolved
// and its value will be the result of promiseA incremented by 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64687 次 |
| 最近记录: |