在执行下一行代码之前,我怎么能等到Promise得到解决?
例如
var option = null;
if(mustHaveOption){
option = store.find("option", 1).then(function(option){ return option })
}
//wait until promise is resolved before returning this value
return option;
Run Code Online (Sandbox Code Playgroud)
rallrall在他的评论中提供了正确的答案:你做不到
对我来说,解决方案是重新设计我的代码以返回promises,然后接收函数必须根据以下方式评估结果:
function a(){
var option = null;
return mustHaveOption ? store.find("option", 1) : false;
}
}
function b(){
res = a();
if (!res){
res.then(function(option){
// see option here
});
}
}
Run Code Online (Sandbox Code Playgroud)
对我来说,另一个关键的解决方案是使用承诺的哈希值.在创建下一个代码之前,创建一个必须解决的所有promise的数组:
Em.RSVP.Promise.all(arrayOfPromises).then(function(results){
//code that must be executed only after all of the promises in arrayOfPromises is resolved
});
Run Code Online (Sandbox Code Playgroud)
我花了一段时间来围绕这种异步的编程方式 - 但是一旦我做了很好的工作.
使用 ES6,您现在可以使用该async/await语法。它使代码更具可读性:
async getSomeOption() {
var option = null;
if (mustHaveOption) {
option = await store.find("option", 1)
}
}
return option;
Run Code Online (Sandbox Code Playgroud)
PS:这段代码可以简化,但我宁愿让它与上面给出的示例保持接近。
| 归档时间: |
|
| 查看次数: |
11915 次 |
| 最近记录: |