gpt4 book ai didi

javascript - 使用 Javascript 中的缓冲池大小同时执行 promise

转载 作者:搜寻专家 更新时间:2023-10-31 22:44:30 30 4
gpt4 key购买 nike

我有一个带有 promise 的函数,每次必须使用不同的参数执行 n 次。我想以脚本始终处理 3-4 个 promise 的方式链接 promise 。

我用 promise.all 做到了,这会同时执行 3 个,当所有 promise 都解决后,它会继续执行下一个 3。

如何让它工作,当 3 个中的一个解决时,它会立即开始另一个,但同时始终处理最多 3 个?

for( var i = 0; i < tasks.length; i++){

if( i > 0 && i%3 == 0 ){

await Promise.all([
doTaskFunction(tasks[i]),
doTaskFunction(tasks[i-1]),
doTaskFunction(tasks[i-2]),
]);
}

}

最佳答案

您可以使用 es6-promise-pool 轻松实现此目的:

const tasks = [
(param) => new Promise(function(resolve, reject) {
setTimeout(resolve, 2000, 'foo');
}),
() => new Promise(function(resolve, reject) {
setTimeout(resolve, 2000, 'foo');
}),
() => new Promise(function(resolve, reject) {
setTimeout(resolve, 2000, 'foo');
}),
() => Promise.resolve(1),
() => Promise.resolve(2),
() => Promise.resolve(3)
];

let count = 1;

const promiseProducer = () => {
while(tasks.length) {
console.log('processing ' + count++);
const task = tasks.shift();
return task(); // optionally you could pass a parameter here
}

return null;
}

const pool = new PromisePool(promiseProducer, 3); // concurrent Promises set to 3
const poolPromise = pool.start();

poolPromise.then(() => { console.log('done!'); })
<script src="https://cdn.jsdelivr.net/npm/es6-promise-pool@2.5.0/es6-promise-pool.min.js"></script>

关于javascript - 使用 Javascript 中的缓冲池大小同时执行 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48709500/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com