-1
我有一個循環,我需要在回調中運行,不幸的是訪問回調之外的數組留下了一個空白數組。我知道爲什麼發生這種情況,但我想知道解決這個問題的最佳解決方案。推送到回調函數內的循環內的數組
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上回答了幾十次。你爲什麼會想象在異步調用已經完成之前數組會被填充?回調正在異步執行 - 這意味着「將來某個時候」。除非您有時間機器,否則您將無法訪問將在將來某個時間不會設置的變量。 – 2015-02-12 02:49:50
感謝torazaburo,正如我所說的,我知道爲什麼......問題是解決這個問題的最優雅的方法。 – 2015-02-12 03:07:29