I, 我知道,在SO上有很多关于此的信息,但我没有找到适合我情况的正确答案。
我有这段代码:
for(var i=0; i < shop.collections.length; i++){
if(!shop.collection[i].active){
var data = {
name: shop.collection[i].name,
visible: true
};
myOwnService.createCollection(data, accessToken, function(err, response, body){
shop.collections[i].serviceId = body.id;
})
}
我的问题是shop
服务中myOwnService.createCollection()
未定义。在回调中访问shop
变量的正确方法是什么,所以我如何更新对象以便保存结果?
答案 0 :(得分:2)
shop
位于myOwnService.createCollection
函数的父作用域中,因此可以在其中访问。
上述代码中只有问题i
在callback
中使用,它始终是最后一个值,因为它将在事件循环后执行。
在IIFE
周围使用myOwnService.createCollection
包装,以便传递i
的范围。
for (var i = 0; i < shop.collections.length; i++) {
if (!shop.collection[i].active) {
var data = {
name: shop.collection[i].name,
visible: true
};
(function(i) {
myOwnService.createCollection(data, accessToken, function(err, response, body) {
shop.collections[i].serviceId = body.id;
});
})(i);
}
}
答案 1 :(得分:0)
应该可以在您尝试访问的位置访问它。如果您正在使用Chrome调试器来查看它是否具有该值,那么Chrome调试器有时会搞砸并显示它不可用。