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
})
});