Javascript 同时使用u.map和async.map

Javascript 同时使用u.map和async.map,javascript,node.js,asynchronous,underscore.js,node-async,Javascript,Node.js,Asynchronous,Underscore.js,Node Async,在我正在处理的应用程序的节点部分中,我同时使用了.map和async.map。在一起使用这些库时,我遇到了一些困惑 我有一个名为results的数组,看起来像这样: [[1, 2, 3], [2, 4, 6], [1, 3, 5]] 我想使用\.map访问每个内部数组,然后使用async.map对每个内部数组中的每个值进行API调用。然后,我想使用此API调用的结果将内部数组中的每个整数替换为一个对象 因此,在最后,我的整数数组数组将改为基于API调用结果的对象数组数组 [[{id: 1, e

在我正在处理的应用程序的节点部分中,我同时使用了
.map
async.map
。在一起使用这些库时,我遇到了一些困惑

我有一个名为
results
的数组,看起来像这样:

[[1, 2, 3], [2, 4, 6], [1, 3, 5]]
我想使用
\.map
访问每个内部数组,然后使用
async.map
对每个内部数组中的每个值进行API调用。然后,我想使用此API调用的结果将内部数组中的每个整数替换为一个对象

因此,在最后,我的整数数组数组将改为基于API调用结果的对象数组数组

[[{id: 1, email: 'test@example.com', state: 'active'}], ...]
这是我目前拥有的代码,我相信我走在了正确的道路上。我的第一个
console.log
为我提供了目标对象,但第二个只返回整数:

_.map(results, function(result) {
  async.map(result, function(user, callback) {
    db.users.getById(user, function(err, userDetails) {
      if (err) {
        callback(null, null);
      } else {
        user = _.pick(userDetails, 'id', 'email', 'state');
        console.log(user);
      }
    });
    console.log(user);
  })
});

这是异步的,因此,您只能在回调中获得最终结果

您应该将3个参数传递给
async.map(数组、迭代器、回调)

对内部和外部数组使用
async.map
,而不是
\uu.map
将非常方便

来自:


但很快你就会发现在这方面更具表现力。

你在哪里记录它?@Mathletics在我最初的问题中向代码中添加了日志。在异步操作
getById
完成之前,你正在记录
user
,所以当然它仍然是输入。
async.map(results, userArrayHandler, function(err, yourFinalArray) {
    console.log(yourFinalArray);
});

function userArrayHandler(userArray, callback) {
    async.map(userArray, getUser, function(err, results) {
        callback(null, results);
    });
}

function getUser(userId, callback) {
    db.users.getById(userId, function(err, userDetails) {
        if (err) {
            callback(err);
        } else {
            var user = _.pick(userDetails, 'id', 'email', 'state');
            callback(null, user);
        }
    });
}
_.map(results, function(result) {
  async.map(result, function(user, callback) {
    db.users.getById(user, function(err, userDetails) {
      callback(err, _.pick(userDetails, 'id', 'email', 'state'));
    });
  }, function(err, users){
    // here you will have your populated array of (arrays of) users
  })
});