我想要像async
库这样的东西来执行两个并行调用,其中一个在javascript中成功,然后回调对成功的输出进行操作。 async
似乎没有这个功能。如果其中任何一个失败,parallel
就会出错。
一般来说,如果我有 N
个任务,并且我想保证 m
成功并使用这些 m
调用的输出,如何我能做到吗?
最佳答案
Promise.race
您想要Promise.race
(假设您愿意从async
转向Promise):
Promise.race([d1, d2]) . then(result =>
来自MDN :
The
Promise.race
method returns a promise that resolves or rejects as soon as one of the promises in the iterable resolves or rejects, with the value or reason from that promise.
以回调方式编写race
据我所知,async
没有提供与竞赛相当的功能,但你可以这样做:
async.race = function(tasks, callback) {
var done = false;
tasks.forEach(function(task) {
task(function(err, data) {
if (done) return; // another task finished first
done = true;
callback(err, data);
});
});
};
也许您想要一个忽略错误的 race
变体——尽管这种设计似乎有问题。在这种情况下:
async.firstFulfilled = function(tasks, callback) {
var done = false;
tasks.forEach(function(task) {
task(function(err, data) {
if (err || done) return; // skip failures
done = true;
callback(err, data);
});
});
};
返回前 n 个非错误案例:
async.firstNFulfilled = function(n, tasks, callback) {
var result = [];
tasks.forEach(function(task) {
task(function(err, data) {
if (err) return;
result.push(data);
if (!--n) callback(null, result);
});
});
};
关于javascript - 两个并行调用,其中一个在 JavaScript 中成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32643593/