等待执行新的内部承诺

Sho*_*oyo 3 javascript promise chain q

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

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

情况如下:

    function asyncCall(object){
           return firstObject.loadSomething(object).then(function(result) {
               result.innerAsyncCall().then(function() {
                    finalCode();
               });
           });
    }
Run Code Online (Sandbox Code Playgroud)

我遍历asyncCall并构建一​​个$ q.all().then()等待promises解析.
但是,由于内部承诺没有链接,它独立运行.
示例代码:

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

$q.all(promises).then(function(){
     console.log('Done!!');
});
Run Code Online (Sandbox Code Playgroud)

问题是.我可以做些什么来等待内部承诺的全面执行?

Ber*_*rgi 8

如果你使用promise来解决一个promise,它会"递归地"采用它的状态并等待最里面的一个.在.then()调用的情况下,新的promise将使用回调的返回值来解决- 所以你只需要return在代码中添加一个它就可以了:

function asyncCall(object) {
    return firstObject.loadSomething(object).then(function(result) {
        return result.innerAsyncCall().then(function() {
//      ^^^^^^
            finalCode();
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

请注意,您也可以将其展平为一个链:

function asyncCall(object) {
    return firstObject.loadSomething(object).then(function(result) {
        return result.innerAsyncCall();
    }).then(finalCode);
}
Run Code Online (Sandbox Code Playgroud)