动态执行promise队列该如何做呢forEach+sync await不可用

有一业务逻辑
查询users对象,生成一个数组

users.forEach(....

根据userid 查询一个值,扩展到users[i]中.

但是sequelize返回的都是promise对象

这就导致forEach中要加入promise,这是不符合规范的,也行不通。

但是此需求该如何实现呢?

试过

for(var i=0;i<users.length;i++){
    async(()=>{
       await x.findOne(... 
    })()
   }

此法无效

也试过co,也不行
promise.All也试过,但是用

function p(){
    return new promise(..
}

则调用的时候有涉及到for循环,请教如何解决该矛盾
阅读 5.1k
3 个回答

let asyncFn = (item) => {
return new Promise((resolve, reject) => {

setTimeout(() => {console.log(item); resolve(true)}, 0)

})
}

let a = ['a','b','c','d']

a.reduce((previous, current, index, array) => {
return previous
.then(()=>{return asyncFn(array[index])})
}, Promise.resolve())

async function test() {
  for (let i = 0, len = 2; i < len; i++) {
    console.log(i);
    await delay();
  }
  console.log('end');
}

function delay() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve();
    }, 2000);
  })
}

test();
const results = Promise.all(users.map(user => doWhatever(user)));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进