Я пытаюсь использовать обещания для выполнения цикла внутри цикла. Я хочу, чтобы внутренний цикл завершил свою итерацию, а затем внешняя петля должна итерации.Вложенные Promise.map() не возвращают никакого результата
, например: -
arr1 = [1,2,3,4];
arr2 = [5,6,7,8];
loopOfArr1{
loopOfArr2{
//functionality
}
}
Я хочу, чтобы для каждого значения arr1, петля arr2 должны получить казнены. и это будет как синхронизация цикла, так и синхронизация.
Вот мой код, используя обещания: -
exports.getAtpagesWeights = function(atpagesDataArray,selectedTagsIds, taggings, callback){
var atpageData, forHubCount;
return Promise.map(selectedTagsIds, function(tag, index, count){
return Promise.map(taggings, function(tagging, index, count){
return new Promise(function(resolve, reject){
var atpageArray = _.filter(atpagesDataArray, function(item){
if(tagging.taggable_id == item.id && tagging.tag_id == tag){
item = item.toObject();
item.rank_weight = tagging.atpages_weight;
resolve(item);
}
})
})
})
}).then(function(result){
console.log(result);
callback(null, result);
}).catch(function(error){
callback(error, null);
})
}
Но когда я проверить журнал, ничего не печатается, может кто-нибудь сказать, где я буду неправильно, или есть лучший подход?
Я не вижу ничего асинхронного кода. Что вы используете для обещаний? Кроме того, обещания и обратные вызовы не очень хорошо сочетаются. Избегайте их смешивания. – Tomalak
поэтому, если я использую forEach вместо обещания, как я смогу получить полученный массив, можете ли вы, пожалуйста, поддержать это с помощью быстрого примера? –
Не зная, что такое входы и какой вывод вы пытаетесь построить. Но здесь нет ничего асинхронного. Забудьте обратные вызовы. Забудьте обещания. Брось все это. Напишите простую функцию, которая запускает цикл по своим параметрам, вычисляет значение и возвращает это значение. – Tomalak