我试图遍历一个数组并查找分配给每个人的票证数量。
不幸的是,由于它的异步特性,我注意到我的@typeName
获得了相同的值,但顺序却不同。
某些查询可能需要很长时间,因此首先插入完成的查询会插入,因此我的数组具有相同的值,但顺序不同。现在,我想避免这种情况,因此一旦查询完成,就只能从数组中拾取下一个值并将其推送到数据库中进行搜索。如何修改现有代码。
taskcount
答案 0 :(得分:0)
您可以使用旨在处理此类情况的async
模块。
我已经更新了以下代码
var async = require('async');
exports.find_task_count = function (callback) {
var names = ['Evan', 'Surajit', 'Isis', 'Millie', 'Sharon', 'Phoebe', 'Angel', 'Serah'];
async.map(names, function (name, iterateeCallback) {
_tasks.find({ 'assignee': name }, function (err, tickets) {
if (err) {
return iterateeCallback(err);
}
return iterateeCallback(null, tickets.length);
});
}, function (error, results) {
if (error) {
return callback(error);
}
return callback(null, results);
});
}
根据async
的文档请注意,由于此函数并行地将iteratee应用于每个项目,因此不能保证iteratee函数将按顺序完成。但是,结果数组的顺序与原始coll的顺序相同。
如果您仍要连续处理数组,请在上面的代码中使用mapSeries
代替map