Использование async.js в первый раз и ощущение, что я просто полностью что-то упустил, когда я добрался до рабочего состояния с помощью грубой силы, и я не уверен, что он будет работать с любым другим набор данных. Хотелось бы узнать, есть ли что-то, чего я не вижу здесь.Цепочка для EachOf в 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
});
Это происходит, чтобы быть функциональным прямо сейчас, но у меня есть ощущение, что это из-за времени и удачи, и если звонки были медленнее из если бы было больше данных это не сработает. Я делаю что-то неправильно здесь? Есть ли лучший подход?