【问题标题】:how can we make sure all the promises gets resolved before running next cycle of loop在运行下一个循环之前,我们如何确保所有的承诺都得到解决
【发布时间】:2021-02-05 06:46:04
【问题描述】:

我们如何确定一个循环中是否有多个 Promise(如 5-10 个)运行 100 次,我们如何确保所有的 Promise 在运行下一个循环之前得到解决。

假设我正在运行一个循环

项目数组的长度 = 100;

for(i in items)
{
  if(i=0)
  {
     await getData1();
  }
  if(i=1)
  {
     const a = await getData2();
     const b = await getData3(a);
  }
}

如果第一次 = 1,它正在运行。我如何确保在运行 i=2 之前,它应该解决 i=1 的所有承诺。 并且不应该积累未解决的承诺。

【问题讨论】:

  • await 将保证承诺得到解决。
  • 你想要 Promise.all([...])
  • @zerkms :等待将解决我的承诺,但我希望先解决该承诺,然后移至下一行,如果未解决,则应等到那时,但仅在解决后才应移至下一行行。
  • @linda : Promise.all 将解决 promise 但我们如何告诉它它应该解决它的顺序,cz 我的第一个函数的输出是第二个函数的输入。
  • @SunnySinha 这就是你的代码要做的事情:下一次迭代只会在之前的承诺得到解决后开始。

标签: typescript async-await es6-promise


【解决方案1】:

你可以使用async模块,检查documentation

let async = require('async');
async.eachSeries(items, async(item)=>{
       await getData1();
       const a = await getData2();
       const b = await getData3(a);

},()=>{
    console.log("finish")
})

【讨论】:

  • 您不应将 javascript 关键字重新分配为变量。我会使用“asyncModule”或类似的。
  • 你能解释更多吗?我的回答有什么问题? @LoganDevine
  • @MohammadYaserAhmadi 您正在将变量 async 分配给值 require('async')async 是 JS 中的关键字(用作 async function ...),将关键字分配为变量绝不是一个好主意(甚至不可能)。 async 作为关键字用作async function ...(修饰符)。
  • 这是一个流行的模块,查看文档或搜索async npm
  • 这个第 3 方库比他们的原始代码更好吗?
猜你喜欢
  • 1970-01-01
  • 2015-01-28
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
相关资源
最近更新 更多