【问题标题】:Wait execution of a new inner promise等待执行新的内部承诺
【发布时间】:2016-02-17 17:57:31
【问题描述】:

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

我有一个新的承诺被第一个承诺的结果所调用。

情况如下:

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

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

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

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

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

【问题讨论】:

  • 你必须只在内部解决外部承诺..

标签: javascript promise q chain


【解决方案1】:

如果你用一个 Promise 解决一个 Promise,它会“递归地”采用它的状态并等待最里面的状态。在.then() 调用的情况下,新的promise 会通过回调的返回值 解决——因此您只需在代码中添加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);
}

【讨论】:

  • 谢谢。我走了同样的路,你的回答有帮助。
猜你喜欢
  • 1970-01-01
  • 2018-12-24
  • 2018-04-17
  • 1970-01-01
  • 2018-04-02
  • 2020-08-14
  • 2020-06-24
  • 2022-12-08
  • 2019-05-31
相关资源
最近更新 更多