gpt4 book ai didi

javascript - 两个并行调用,其中一个在 JavaScript 中成功

转载 作者:行者123 更新时间:2023-11-28 06:54:49 25 4
gpt4 key购买 nike

我想要像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/

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