第一次使用async.js,感觉我只是完全错过了一些东西,因为我通过蛮力进入工作状态,我不相信它会与任何其他数据集一起工作。很想知道我有没有在这里看到的东西。
我有一个对象数组,每个对象都包含一个数组。我想迭代子数组,在调用mongo时使用它,并在它们全部返回后对结果做一些事情。数据如下所示:
数据
productVersions: [
versionA: {
relevantField: [
{
relevantId: value
},
{
relevantId: value
}
]
},
versionB: {
relevantField: [
{
relevantId: value
},
{
relevantId: value
},
{
relevantId: value
}
]
}
];
在代码中,我想调用relevantField
中productVersions
中的每个对象,并且在对两个版本进行了所有调用之后,对结果执行一些操作。代码如下所示:
代码
async.forEachOf(productVersions, function(version, versionIndex, versionCallback){
async.forEachOf(relevantField, function(object, objectIndex, objectCallback){
Users.findById(object.relevantId, function(err, model){
// get some information from mongo
objectCallback();
});
}, function(){
versionCallback();
});
}, function(err){
// Do something with all the results
});
这恰好可以正常使用,但我感觉这是因为时间和运气,如果有更多的数据,那么调用速度较慢,那就不行了。我在这里做错了吗?有更好的方法吗?
答案 0 :(得分:0)
由于async
维护者对我来说很好,虽然我的个人偏好让我将这些功能分开。您还可以考虑使用瀑布/系列来管理此流程
function processRelevantField(object, objectIndex, objectCallback){
Users.findById(object.relevantId, function(err, model){
// get some information from mongo
objectCallback();
});
}
function processVersion(version, versionIndex, versionCallback){
async.forEachOf(relevantField, processRelevantField, function(){
versionCallback();
});
}
async.forEachOf(productVersions, processVersion, function(err){
// Do something with all the results
});