访问异步调用的回调参数

时间:2014-05-24 15:59:02

标签: node.js asynchronous

我有一个返回包含一些数据的回调的函数,如何在异步完成时使用异步运行它并访问数据?

示例:

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 {

      }
  });
});

2 个答案:

答案 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) {...}