在 Promise 链中的 for 循环中的 Promise

3

我有一个比较棘手的问题,找不到一个合适的答案。问题出在 Firebase 上,因为它不支持 await 和 async。

目前程序可以运行,但只会运行一次而无法循环。

return foo.bar(query);})
        .then((result) => {

            if (result == '0') {
               //do stuff
            } 


            else {
                var i;
                for(i = 0; i <= result; i++) {
                    return foo.bar(secondQuery);})
                    .then((secondResult) => {
                        //do other stuff                


                    })
                }

            }

        })

5
return会在第一次迭代后终止函数。你想在那里实现什么? - CertainPerformance
1个回答

3

您可以使用Promise.all

Promise.all(iterable) 方法返回一个 Promise 实例,该实例在 iterable 参数内所有的 promise 都“完成(resolved)”或参数中不包含 promise 时回调完成(resolve);如果参数中 promise 有一个失败(rejected),此实例回调失败(reject),失败原因的是第一个失败 promise 的结果。

return foo.bar(query).then(result => {

  if (result == '0') {
    //do stuff
  } else {

    var i;
    var all = [];
    for (i = 0; i <= result; i++) {
      var p = foo.bar(secondQuery).then((secondResult) => {
        //do other stuff                
      });

      all.push(p)
    }

    return Promise.all(all);
  }

});

所以我的实现有点复杂。我按照您在应用程序上下文中所说的做了,下面粘贴了完整的代码,因为它似乎仍然只运行一次。它没有循环。https://pastebin.com/ReXD1G0e - Nathan Liu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接