我对JavaScript和回调都很陌生,所以如果这是一个愚蠢的问题我很抱歉。基于async docs for parallel,我想出了基于文档执行预期方式的示例代码:
async = require('async')
async.parallel([
function(callback){
setTimeout(function(){
callback(null, 'one');
}, 800);
},
function(callback){
setTimeout(function(){
callback(null, 'two');
}, 100);
}
],
function(err, results){
console.log(results)
})
使用node foo.js
运行此操作会打印结果数组['one', 'two']
,因为文档会指示它。我不明白的是这是如何工作的:当你将callback
作为参数传递给每个函数然后callback
被称为callback(null, res)
时,究竟是什么被称为她吗?我实际上没有定义任何函数回调,也没有将任何类型的操作回调函数作为参数传递,但一切都神奇地工作正常。我完全忽略了这一点吗?或者这实际上是async
?
答案 0 :(得分:2)
你 不通过callback
到任务功能的那个,异步模块 。它是一个特殊的函数,模块传递给你的任务函数,当被调用时,它会检查是否还有更多的任务。
这与async
中的内容类似:
function myParallel(tasks, finalcb) {
var tasksLeft = tasks.length,
results = [],
ignore = false;
function callback(err, result) {
if (ignore) return;
if (err) {
ignore = true;
finalcb && finalcb(err);
} else if (--tasksLeft === 0) {
ignore = true;
finalcb && finalcb(null, results);
} else
results.push(result);
}
tasks.forEach(function(taskfn) {
taskfn(callback);
});
}
myParallel([
function(callback) {
setTimeout(function() {
callback(null, 'one');
}, 800);
},
function(callback) {
setTimeout(function() {
callback(null, 'two');
}, 100);
}
], function(err, results){
console.log(results)
});