У меня есть цикл, который мне нужно запустить внутри обратного вызова, к сожалению доступ к массиву вне обратного вызова оставляет меня с пустым массивом. Я знаю, почему это происходит, но я хочу знать лучшее решение для решения этой проблемы.Нажатие на массив внутри цикла внутри функции обратного вызова
Gallery.prototype.getGallery = function(cb) {
self = this;
var cos = new pb.CustomObjectService();
var ms = new pb.MediaService();
var s = [];
cos.loadTypeByName('Gallery Image', function(err, gallery){
cos.findByType(gallery._id.toString(), function(err, rpy){
for(var i = 0; i < rpy.length; i++){
ms.loadById(rpy[i].Image, function(e,r){
s.push(r.location);
console.log(r.location); /* <-- logs expected data */
});
}
console.log(s[0]); /* <-- this is undefined */
});
});
};
Я не downvoter, но это вопрос был задан и ответил десятки раз на SO. Почему бы вам предположить, что массив будет заполнен до того, как асинхронный вызов завершится? Обратный вызов выполняется асинхронно - это означает «когда-нибудь в будущем». Если у вас нет машины времени, вы не можете получить доступ к переменным, которые не будут установлены до определенного времени в будущем. –
Спасибо torazaburo, как я уже сказал, я знаю, почему ... ВОПРОС - это самый элегантный способ справиться с этим. –