两个并行调用,其中一个在javascript中成功
two parallel calls either one succeeds in javascript
我想要像async
库那样做两个并行调用,其中一个在javascript中成功,然后回调对成功的输出进行操作。async
似乎没有这个。如果其中任何一个失败,parallel
将出错。
一般来说,如果我有N
任务,并且我想保证m
成功并使用这些m
调用的输出,我该怎么做?
Promise.race
你想要Promise.race
(假设你愿意从async
转移到承诺):
Promise.race([d1, d2]) . then(result =>
从MDN:
Promise.race
方法返回一个承诺,当可迭代对象中的一个承诺被解决或拒绝时,该承诺就会被解决或拒绝,并带有该承诺的值或原因。
用回调方式写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);
});
});
};
可以使用jQuery。Deferred和jQuery。何时实现这一点(也有其他承诺库)。
var d1 = $.Deferred();
var d2 = $.Deferred();
$.when( d1, d2 ).done(function ( v1, v2 ) {
// this will execute only when both deferred objects are resolved
// and the values passed to those for resolving will be available
// through v1 and v2
});
$.get('url1').success(function() { d1.resolve('value for v1') });
$.get('url2').success(function() { d2.resolve('value for v2') });
jQuery。当:https://api.jquery.com/jQuery.when/
jQuery。延迟:https://api.jquery.com/category/deferred-object/
相关文章:
- 我应该如何从xml文件构建一个javascript页面
- 有没有一个javascript图形绘制库可以进行气球树布局
- 如何将一个JavaScript函数回调为多个函数
- 代码背后调用一个JavaScript函数的按钮点击-C#
- 多次调用另一个javascript函数中的javascript函数
- HTML外部javascript加载另一个javascript
- 在一个javascript文件中为整个网站创建标签
- 在任何AJAX调用之前触发一个javascript函数
- 如何用另一个Javascript更改Javascript函数值
- 动态创建一个javascript/jquery多级数组
- 将变量值从一个javascript传递到另一个javascript
- 获取一个javascript对象attr's
- 是一个javascript bookmarklet,可以设置破坏跨域安全的域cookie
- PNG图像被覆盖,但每个图像都有一个链接可以更改,每次一个-Javascript/jQuery/CSS
- 添加一个javascript函数来下载elfinder上的事件
- 有没有一个Javascript代码可以看到你的缓存有多满
- 使用jenkins从不同文件夹中的文件构建一个javascript文件
- 是否有一个javascript库来解析简单的查询
- 一个javascript实现base64图像编码并将结果写入文本文件
- 使用一个Javascript函数提交多个表单可以在FF中工作,而不需要其他浏览器