当前位置: 首页 > 面试题库 >

如何顺序执行promise,从数组中传递参数?

汪弘盛
2023-03-14
问题内容
var myArray = [1, 2, 3, 4, 5, 6]

function myPromise(num){
  return new Promise(res => {
    window.setTimeout(()=>{
      res(  console.log("done: " + num)  )
    },2000)
  })
}


myPromise(myArray[0])
  .then(x => myPromise(myArray[1]))
  .then(x => myPromise(myArray[2]))
  .then(x => myPromise(myArray[3]))
  .then(x => myPromise(myArray[4]))
  .then(x => myPromise(myArray[5]))

现在,如果我执行上面的语句,它将按顺序运行。在我的实际用例中,数组是动态填充的,我需要myPromise()为中的每个成员执行函数myArray

我如何制作一个“暂停循环”,该循环将为数组中的每个项目循环,执行myPromise并等待promise被解决,然后再继续下一次迭代?


问题答案:

如果可以.then按问题中的情况创建与数组元素一样多的Promise,则可以整齐地重复应用fold。

myArray.reduce(
  (p, x) =>
    p.then(_ => myPromise(x)),
  Promise.resolve()
)

但是,例如,异步函数不需要:

const mapSeries = async (iterable, action) => {
  for (const x of iterable) {
    await action(x)
  }
}

mapSeries(myArray, myPromise)

内置在优秀承诺库Bluebird中的格式mapSeries

Promise.mapSeries(myArray, myPromise)

可运行的代码段:

const myArray = [1, 2, 3, 4, 5, 6]



const sleep = ms =>

  new Promise(res => {

    setTimeout(res, ms)

  })



const myPromise = num =>

  sleep(500).then(() => {

    console.log('done: ' + num)

  })



myArray.reduce(

  (p, x) =>

    p.then(_ => myPromise(x)),

  Promise.resolve()

)


 类似资料:
  • 问题内容: 这似乎是一个愚蠢的问题,但是我是这个话题的新手。我正在致力于关于节点js的承诺。我想将参数传递给Promise函数。但是我不知道。 而功能类似于 问题答案: 将Promise包裹在一个函数中,否则它将立即开始工作。另外,您可以将参数传递给函数: 然后,使用它: ES6: 用:

  • 问题内容: 我有一系列的诺言,需要按顺序运行。 调用RSVP.all将并行执行它们: 但是,如何依次运行它们? 我可以像这样手动堆叠它们 但是问题在于承诺的数量各不相同,并且承诺的数组是动态构建的。 问题答案: 如果您已经将它们放在数组中,那么它们已经在执行。如果您有一个承诺,那么它已经在执行。这与promise无关(即,在方法方面,它们不像C#一样)。什么都不执行,只会返回一个承诺。 如果您有一

  • 我在Eclipse中工作。 我的Maven程序有一个pom。带有exec插件的xml文件: 我试图传递一个参数,但仍然出现错误: 未知的生命周期阶段“..\src\test\resources\file.txt”。您必须以以下格式指定有效的生命周期阶段或目标:或:[:]。可用的生命周期阶段包括:验证、初始化、生成源、流程源、生成资源、流程资源、编译、流程类、生成测试源、流程测试源、生成测试资源、流

  • 我正在尝试使用JavaDOM解析器为XML文档中的许多标记建立索引,以从中形成类似MIB的结构(例如 我希望将模块映射到1,将容器映射到1.1,将列表映射到1.1.1,将叶映射到1.1.1.1,将另一个叶映射到1.1.1.2(我已经有了这样做的方法),但在嵌套相同命名的XML标记时,我遇到了问题。以下是我创建的函数——为了简单起见,只需打印属性名 下面是我试图解析的XML示例: 当我在这个程序上运

  • 本文向大家介绍setTimeout和Promise的执行顺序?相关面试题,主要包含被问及setTimeout和Promise的执行顺序?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 首先我们来看这样一道题: 输出答案为2 10 3 5 4 1 要先弄清楚settimeout(fun,0)何时执行,promise何时执行,then何时执行 settimeout这种异步操作的回调,只有主线程

  • 我实现了以下promise函数,比如 cart.getbasket(req) Cart.UpdateBasket(req) Cart.UpdateDefaultShipport(req) cart.GetBasketObject(basket) 当前我执行代码时使用 我读过关于的文章,并想把它用作逻辑的流程,但当我使用时,它并不像预期的那样工作,因为我看到each的