【发布时间】:2015-02-12 12:06:18
【问题描述】:
我有一个需要在回调内部运行的循环,不幸的是,访问回调外部的数组会给我留下一个空白数组。我知道为什么会发生这种情况,但我想知道解决这个问题的最佳解决方案。
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 */
});
});
};
【问题讨论】:
-
我不是反对者,但这个问题已经在 SO 上被问过并回答了几十次。为什么你会想象在异步调用完成之前数组会被填充?回调是异步执行的——这意味着“将来的某个时候”。除非你有一台时间机器,否则你无法访问在未来某个时间才会设置的变量。
-
感谢 torazaburo,正如我所说,我知道为什么......问题是解决这个问题的最优雅的方法。
标签: node.js