San*_*S B 6 javascript node.js promise
我想并行处理多个异步调用NodeJS。如果特定数量的这些呼叫得到解决或全部完成(一些解决,一些拒绝),我可以继续。如何做到这一点?
Promise.All()当所有承诺都完成时解决,Promise.Any()当任何一个承诺解决或全部被拒绝时解决。有什么办法可以等待 50% 的承诺解决或n解决承诺数量,而不是等待所有承诺解决。
您可以编写一个函数,将 then 回调附加到每个给定的Promise,每次增加计数(或将结果推送到数组),并在计数达到特定值时进行解析。
一个基本的例子:
function nResolve(promises, n) {
if (n < 0) throw Error('Invalid n: ' + n);
let results = [], rejected = 0;
return new Promise((resolve, reject) => {
if (!n) resolve([]);
else promises.forEach(promise => promise.then(res => {
results.push(res); // note: order is unpredictable
if (results.length === n) resolve([...results]);
}, err => {
// reject only when there are not enough promises left for n to resolve
if (++rejected > promises.length - n) reject();
}));
});
}
const delay = ms => new Promise(r => setTimeout(() => {
console.log(ms);
r(ms);
}, ms));
nResolve([delay(2000), delay(100), delay(500), delay(1000), delay(2000),
delay(3000), delay(5000), delay(10000)], 4)
.then(results => console.log('4 Promises resolved', results));Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |