等待执行新的内部承诺
Wait execution of a new inner promise
我是这个 promises 世界的新手,我遇到了很多情况,我不知道该怎么做。
第一个承诺的结果调用了一个新的承诺。
情况是这样的:
function asyncCall(object){
return firstObject.loadSomething(object).then(function(result) {
result.innerAsyncCall().then(function() {
finalCode();
});
});
}
我循环遍历 asyncCall 并构建一个 $q.all().then() 来等待承诺解决。
然而,由于内部承诺没有链接,它独立运行。
示例代码:
var promises = [];
array.forEach(function(object){
promises.push(asyncCall(object));
});
$q.all(promises).then(function(){
console.log('Done!!');
});
问题是。如何等待内在承诺的完全执行?
如果你用一个 promise 解决一个 promise,它将 "recursively" 采用它的状态并等待最里面的那个。在 .then()
调用的情况下,新的承诺通过回调的 return 值 解决 - 所以你只需要添加一个 return
添加到您的代码中,它将起作用:
function asyncCall(object) {
return firstObject.loadSomething(object).then(function(result) {
return result.innerAsyncCall().then(function() {
// ^^^^^^
finalCode();
});
});
}
请注意,您还可以 flatten this into a chain:
function asyncCall(object) {
return firstObject.loadSomething(object).then(function(result) {
return result.innerAsyncCall();
}).then(finalCode);
}
我是这个 promises 世界的新手,我遇到了很多情况,我不知道该怎么做。
第一个承诺的结果调用了一个新的承诺。
情况是这样的:
function asyncCall(object){
return firstObject.loadSomething(object).then(function(result) {
result.innerAsyncCall().then(function() {
finalCode();
});
});
}
我循环遍历 asyncCall 并构建一个 $q.all().then() 来等待承诺解决。
然而,由于内部承诺没有链接,它独立运行。
示例代码:
var promises = [];
array.forEach(function(object){
promises.push(asyncCall(object));
});
$q.all(promises).then(function(){
console.log('Done!!');
});
问题是。如何等待内在承诺的完全执行?
如果你用一个 promise 解决一个 promise,它将 "recursively" 采用它的状态并等待最里面的那个。在 .then()
调用的情况下,新的承诺通过回调的 return 值 解决 - 所以你只需要添加一个 return
添加到您的代码中,它将起作用:
function asyncCall(object) {
return firstObject.loadSomething(object).then(function(result) {
return result.innerAsyncCall().then(function() {
// ^^^^^^
finalCode();
});
});
}
请注意,您还可以 flatten this into a chain:
function asyncCall(object) {
return firstObject.loadSomething(object).then(function(result) {
return result.innerAsyncCall();
}).then(finalCode);
}