首页 > 解决方案 > 在不使用 async/await 的情况下按顺序执行一组 Promise

问题描述

可以说我有一系列的承诺。我的数组的每个元素都是一个 knex.js 查询构建器,可以执行并返回一个 Promise。

如何按顺序运行该数组的每个元素。该数组是动态构建的。

let promisesArray = [q1,q2,q3] ;

每个 q 本身并不是一个 Promise,但它会在执行时返回一个 Promise。

标签: javascriptnode.jspromise

解决方案


这可能是一个可能的选择:

let p = Promise.resolve([]);
promisesArray.forEach(q => {
  p = p.then(responses => {
    //based on the nature of each q, to start execution
    //use either q().then() or q.then()
    return q().then(response => {
      //Any further logic can be here.
      console.log(response);
      return responses.concat([response]);
    })
  })
})

p.then(responses => {
  // here you have all of the responses.
})

推荐阅读