如何在node.js的async.parallel中创建for循环

如何在node.js的async.parallel中创建for循环,node.js,asynchronous,Node.js,Asynchronous,我有一个如下的代码片段 async.parallel({ foo: function(call) { request.get('...?node=foo', function (error, response, body) { var last=JSON.parse(body); call(null,last.data.result); }); }, bar: function(call) { r

我有一个如下的代码片段

async.parallel({

    foo: function(call) {

      request.get('...?node=foo', function (error, response, body) {

        var last=JSON.parse(body);
        call(null,last.data.result);
      });

    },
    bar: function(call) {
      request.get('...node=bar', function (error, response, body) {

        var last=JSON.parse(body);
        call(null,last.data.result);
      });
    }
  }, function(err, results) {
    callback(results)
  });
var node = ['foo', 'bar'];
async.parallel({

  for (var i = 0; i < node.length; i++) {
    node[i]: function(call) {

      request.get('...?node=' + node[i] + '', function(error, response, body) {

        var last = JSON.parse(body);
        call(null, last.data.result);
      });

    }
  }

}, function(err, results) {
  callback(results)
});
但我想把它循环…也就是说,像下面这样

async.parallel({

    foo: function(call) {

      request.get('...?node=foo', function (error, response, body) {

        var last=JSON.parse(body);
        call(null,last.data.result);
      });

    },
    bar: function(call) {
      request.get('...node=bar', function (error, response, body) {

        var last=JSON.parse(body);
        call(null,last.data.result);
      });
    }
  }, function(err, results) {
    callback(results)
  });
var node = ['foo', 'bar'];
async.parallel({

  for (var i = 0; i < node.length; i++) {
    node[i]: function(call) {

      request.get('...?node=' + node[i] + '', function(error, response, body) {

        var last = JSON.parse(body);
        call(null, last.data.result);
      });

    }
  }

}, function(err, results) {
  callback(results)
});
var节点=['foo','bar'];
异步并行({
对于(变量i=0;i
它不起作用…怎么做?
你能帮我吗?

你有两个选择之一。一个是阅读文档,这将是使用
async
的更规范的方法

看起来是这样的:

async.map(['foo', 'bar'], function (node, callback) {
  request.get('...?node=' + encodeURIComponent(node), function (error, response, body) {
    if (error) return callback(error)
    var last = JSON.parse(body)
    callback(null, last.data.results)
  })
}, function (error, results) {
  // handle error
  callback(results)
})
您的第二个选择是使用同步,完全删除对
async
的依赖,尽管您可能需要类似polyfill的,直到承诺在更大比例的浏览器中使用为止

以下是如何使用本机承诺实现后一种解决方案:

Promise.all(['foo', 'bar'].map(function (node) {
  return new Promise(function (resolve, reject) {
    request.get('...?node=' + encodeURIComponent(node), function (error, response, body) {
      if (error) return reject(error)
      var last = JSON.parse(body)
      resolve(last.data.result)
    })
  })
})).then(function (results) {
  callback(results)
}).catch(function (error) {
  // handle error
})