我有一个返回包含一些数据的回调的函数,如何在异步完成时使用异步运行它并访问数据?
示例:
var async = require('async');
function provisionServer(server, callback) {
return callback('abcd');
}
getServerQueue(function (err, servers) {
async.each(servers, provisionServer, function (err) {
if (err)
logger.error("[async provisionServer] " + err);
else {
console.log("How can I get the 'abcd' from the provisionServer callback?");
async.each(servers, dequeueServer, function (err,result) {
if (err)
logger.error("[async dequeueServer] " + err);
else {
}
});
});
答案 0 :(得分:0)
使用async.map
代替async.each
:
function provisionServer(server, callback) {
return callback(null, 'abcd');
}
getServerQueue(function (err, servers) {
async.map(servers, provisionServer, function (err, results) {
if (err)
logger.error("[async provisionServer] " + err);
else {
console.dir(results);
async.each(servers, dequeueServer, function (err, result) {
if (err)
logger.error("[async dequeueServer] " + err);
else {
}
});
});
答案 1 :(得分:-1)
这里的两个回调似乎有点混乱。
以下是如何细分的:
var list_of_stuff = [1,2,3];
async.each(list_of_stuff, iterator_fn, error_fn);
第一个参数是你想要迭代的东西列表。第二个是要为每个项目调用的迭代器函数。请注意,此函数将感兴趣的项目作为参数,并且迭代器的调用将用于指示完成的回调,如下所示:
function iterator_fn(item, iterator_callback) {...}
传入的下一个函数是error_fn,这只是一个普通的错误处理程序:
function error_fn(error) {...}