如何在任意数量的链元素上使用map或reduce来运行promise-then链



我被卡住了

脚本返回任意数字n或数组,如下所示:

[["a"], ["b"], ["c"], ["d"]]

我需要使用promise then()循环数组,但由于我不知道将有多少元素,我最终这样做:

  var bundle_list = [["a"], ["b"], ["c"], ["d"]];
  var x = bundle_list.reduce(function(current, next) {
  console.log(current);
  // requestBundle will also return a promise
  return requestBundle(current)
    .then(function(bundle_response) {
      // do foo
      console.log("CALLING NEXT")
      console.log(next);
      return RSVP.resolve(next);
    });
})
x.then(function(last_response) {
  return console.log("DONE")
});

我的问题是,我的reduce/map都触发所有迭代之前,我的异步代码运行,所以我得到3倍的current控制台,其次是done控制台。所以我所有的地图"循环"立即运行,结果计时有点(太)晚了…

我正在使用这个RSVP实现,但它是A+所以不应该是一个问题。我一直在尝试按照这里提供的答案工作,但我不能让它正常工作。

问题:
是否有可能用任意数量的then语句创建一个"then-chain"?如果是这样,请提供一些建议!

谢谢!

for(或forEach)循环应该做:

var queue = RSVP.Promise.resolve(); // in ES6 or BB, just Promise.resolve();
bundle_list.forEach(function(el){
    queue = queue.then(function(res){
        console.log("Calling async func for", el);
        return requestBundle(el);
    });
});
queue.then(function(lastResponse){
    console.log("Done!");
});

相关内容

  • 没有找到相关文章

最新更新