Cha*_*her 2 javascript asynchronous node.js async.js
我有一个我想要使用https://github.com/caolan/async并行运行的任务列表.
我希望程序在第一个并行任务完成后继续(可能通过回调),而不是全部.所以我不认为天真
async.parallel([task1, task2], callback)
Run Code Online (Sandbox Code Playgroud)
适合我.
或者,我可以生成两个任务并取消不完整的任务,但我也无法弄清楚如何使用异步.
谢谢!-Charlie
您可以async
通过返回一个error
评估为true
但实际上不是错误的方式来启动最终回调.
我把一个-1
用作错误代码的例子放在一起.在最后的回调中,我检查了error
值,如果不是,-1
那么这是一个实际的错误.如果错误值是,-1
那么我们将有一个有效值results
.此时,我们只需要从results
尚未完成的其他异步函数中删除额外的元素.
在下面的例子中,我使用request
模块来拉取html页面和underscore
模块来过滤最终回调中的结果.
var request = require('request');
var _ = require('underscore');
exports.parallel = function(req, res) {
async.parallel([
/* Grab Google.jp */
function(callback) {
request("http://google.jp", function(err, response, body) {
if(err) { console.log(err); callback(true); return; }
callback(-1,"google.jp");
});
},
/* Grab Google.com */
function(callback) {
request("http://google.com", function(err, response, body) {
if(err) { console.log(err); callback(true); return; }
callback(-1,"google.com");
});
}
],
/* callback handler */
function(err, results) {
/* Actual error */
if(err && err!=-1) {
console.log(err);
return;
}
/* First data */
if(err===-1) {
/*
* async#parallel returns a list, one element per parallel function.
* Functions that haven't finished yet are in the list as undefined.
* use underscore to easily filter the one result.
*/
var one = _.filter(results, function(x) {
return (x===undefined ? false : true);
})[0];
console.log(results);
console.log(one);
res.send(one);
}
}
);
};
Run Code Online (Sandbox Code Playgroud)
当您设置async#parallel
为这样工作时,您将无法访问其他异步函数的结果.如果您只对第一个回复感兴趣,那么这不是问题.但是,您将无法取消其他请求.这很可能不是问题,但可能是一个考虑因素.
归档时间: |
|
查看次数: |
3035 次 |
最近记录: |