等待执行新的内部承诺

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);
}