【发布时间】:2013-04-24 16:12:03
【问题描述】:
以下代码有一个错误,但它提出了一个有趣的问题。它使用 Angular 的 $http 服务,它返回一个承诺。一旦解决,回调函数就无法访问 s1 变量。
var ids = [];
ids = ['81074'];
// show what's in
for (var s=0;s<ids.length;s++) {
var s1 = s;
$http.get('http://mydomain.com/api/catalog/product/' + ids[s]).
success(function(data) {
// console.log(s1); <--- reference error
$scope.products[s].setProductData(data);
}).error(function(err){
console.log('--------- error',err);
});
};
s1 给出 ReferenceError: s1 is not defined in the debugger
有趣的是,它确实可以访问 for 循环变量 s,它始终为 1 - 正如预期的那样,因为 promise 在其递增后得到解决(因此 BTW 错误)
有人能解释一下原因吗?
谢谢
里尔
【问题讨论】:
-
我没有看到
s1的任何用法,错误发生在哪里? -
您的代码在定义后不会在任何地方引用 s1。你怎么会得到一个参考错误?
-
我在调试器中检查了 s1,而在回调中。代码编辑。感谢您的评论
-
我的错误 - 当使用 console.log 正确添加时,它可以工作。谢谢!教训是,调试器无法看到闭包变量,除非它们是显式的。
标签: javascript angularjs closures promise