等待执行新的内部承诺

时间:2016-02-17 17:57:31

标签: javascript promise q chain

我是这个承诺世界的新手,我遇到了一个我不知道该怎么办的情况。

我有一个新的承诺被第一个承诺的结果称为。

情况如下:

    function asyncCall(object){
           return firstObject.loadSomething(object).then(function(result) {
               result.innerAsyncCall().then(function() {
                    finalCode();
               });
           });
    }

我循环遍历asyncCall并构建$ q.all()。然后()等待承诺解析。
然而,由于内在的承诺没有链接,它独立运行 示例代码:

var promises = [];
array.forEach(function(object){
     promises.push(asyncCall(object));
});

$q.all(promises).then(function(){
     console.log('Done!!');
});

问题是。我该怎么做才能完全执行内部承诺?

1 个答案:

答案 0 :(得分:7)

如果您使用承诺解决承诺,它将“递归地”采用其状态并等待最内层的承诺。对于.then()调用,新承诺将通过回调的返回值解决 - 因此您只需在代码中添加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);
}