我的问题基本上是一个组合
我知道Promise.allSettled
,但我未能找到限制并发的好方法。
到目前为止我所拥有的:
想法1使用p-limit
:
const pLimit = require('p-limit');
const limit = pLimit(10);
let promises = files.map(pair => {
var formData = {
'file1': fs.createReadStream(pair[0]),
'file2': fs.createReadStream(pair[1])
};
return limit(() => uploadForm(formData));
});
(async () => {
const result = await Promise.allSettled(promises).then(body => {
body.forEach(value => {
if(value.status == "rejected")
file.write(value.reason + '\n---\n');
});
});
})();
Run Code Online (Sandbox Code Playgroud)
我对这个解决方案的问题是,我必须首先创建所有承诺,并为此为每个承诺打开两个文件流,并且我将达到打开文件的限制。
想法 2使用p-queue
:我尝试使用生成器函数在queue.on
'next'
事件中创建和添加新的承诺,但我无法让它正常工作,这可能不是适合这项工作的工具。
使用 PromisePool 的想法 3:一开始这看起来很有希望。其中一些支持生成器函数来为池创建承诺,但我找不到一个明确声明其行为类似于Promise.allSettled
.