【发布时间】:2018-05-01 15:47:14
【问题描述】:
我正在尝试并行处理一个队列。我有一个对象数组,我需要将函数func 并行应用于每个元素。我正在使链的并行级别如下:
async function() {
const pickUpNextTask = () => {
if (this.internalQueue.length) {
return this.func(this.internalQueue.shift())
}
}
const startChain = () => {
return Promise.resolve().then(function next() {
console.log('before then(next)')
return pickUpNextTask().then(next)
})
}
let chains = []
for (let k = 0; k < this.parallelism; k += 1) {
chains.push(startChain())
}
await Promise.all(chains)
this.drain()
}
它没有像我想要的那样工作。当队列为空时,pickUpNextTask() 最终返回undefined,因此没有 then。
如何处理这个问题?
【问题讨论】:
-
pickUpNextTask没有带有return语句的else。那么它实际上不是返回undefined吗? -
好点。它是
undefined。谢谢。 -
您的代码看起来像是在尝试对队列中的事物进行排序,而不是在第一个项目完成之前执行第二个项目。但是,你的问题说你想要并行处理。你真正想要哪个?
-
@jfriend00 请注意我有
this.parallelism的queues数字,如倍数。
标签: javascript async-await es6-promise