Promise 链中的 for 循环中的 Promise

Posted

技术标签:

【中文标题】Promise 链中的 for 循环中的 Promise【英文标题】:Promise in for loop in promise chain 【发布时间】:2018-12-19 09:54:01 【问题描述】:

我有一个无法找到正确答案的混乱问题。它在不支持等待和异步的 firebase 中。

目前,它可以工作,但只运行一次,不会循环。

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                


                    )
                

            

        )

【问题讨论】:

return 将在第一次迭代后终止函数。你想在那里实现什么目标? 【参考方案1】:

您可以使用Promise.all

Promise.all(iterable) 方法返回一个 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);
  

);

【讨论】:

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

以上是关于Promise 链中的 for 循环中的 Promise的主要内容,如果未能解决你的问题,请参考以下文章

Mocha 抛出超时,但 Mongoose 将数据保存到 Promise 链中的数据库?

复杂承诺返回链中的承诺 catch() 顺序

在 for 循环中使用 Promise

如何在数组方法链中展开 Promise 数组?

Promise循环执行多个请求

Javascript等待Promise在返回响应之前完成for循环