[英]async.each - what's the callback for?
我只想查看网址列表,以查看每个网址是否存在,并在完成所有步骤后继续:
var urls = [ "http://...", "http://...", ... ];
async.each(urls, function(url, ??callback??) {
http.get(url, function(response) {
console.log(response.statusCode);
});
}, function(err) {
if (!err)
console.log("All urls called");
});
我该为什么做??callback??
当每个任务完成后我什么都没继续的时候? 该文档没有表明它是可选的。
第二个参数是iteratee
,它是一个AsyncFunction
:
AsyncFunction()
在Async上下文中,“异步函数”是具有可变数量参数的异步函数,最后一个参数是回调。 (
function (arg1, arg2, ..., callback) {}
)最终的回调形式为callback(err, results...)
,一旦函数完成,就必须调用它。 回调应以Error
作为其第一个参数来调用,以表示发生了错误。 否则,如果未发生错误,则应使用null作为第一个参数以及可能适用的任何其他结果参数来调用,以表示成功完成。 回调函数必须恰好被调用一次,最好是在JavaScript事件循环的稍后时刻进行。
这是一个async
调用您的iteratee
的参数。 对于您的情况,您需要在get
完成(成功或失败)时调用它:
var urls = [ "http://...", "http://...", ... ];
async.each(urls, function(url, callback) {
http.get(url, function(response) {
console.log(response.statusCode);
callback(null); // <====
});
}, function(err) {
if (!err)
console.log("All urls called");
});
async
需要知道操作已经完成,以便可以管理整个过程。
上面的示例很简单,您可能希望将成功与失败区分开来,但是您的想法是必须使用错误(第一个参数)或成功(第一个参数= null
,可选的第二个参数)调用收到的回调。
完成每个异步任务(即获取URL)后,您应该调用callback
。
所以像...
http.get(url, function(response) {
// Here you call it with `null` to signify a non-error completion.
callback(null);
});
...在您主要的每个功能内。 如果您只想调用它而无需任何其他代码,则可以使用http.get(url, callback.bind(null, null))
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.