gpt4 book ai didi

javascript - AngularJS - 即使数组中只有一项,循环也会错误地递增

转载 作者:行者123 更新时间:2023-11-30 11:37:20 24 4
gpt4 key购买 nike

在我的 Angular 应用程序中,我有一段这样的代码

for (var i = 0; i < $scope.itemList.length; i++) {
if ($scope.itemList[i].serialNumber == quickCode) {
console.log(i)
returnsService.getNoReceiptErrorMessages($scope.itemList[i].sku, quickCode).then(function (response) {
console.log(i)

}
}
}

它只是一个 for 循环,在循环内部有一个 Angular 服务来调用后端 api。该数组只有一项。因此 i 的值应始终为 0。但是 console.log(i) 在服务调用之前打印 0 并且在服务调用之后打印 1。有人能指出这里发生了什么吗。

最佳答案

传递给 .then 方法的 callback 是一个闭包,当异步调用发生时,for 循环将继续运行,计数器将继续递增。

闭包执行上下文有一个指向外部范围及其所有变量的指针,您在这里遇到的是当触发回调以及 console.log 时,循环已经完成并且 i 计数器(在执行上下文中可用)将等于数组的大小,即 1。

要在回调中保留实际计数器,您可以将服务调用包装在一个立即调用的函数(创建一个隔离范围)中,将实际计数器作为参数传递。

(function(count){ 
//here i will be detached scoped to this function
returnsService.getNoReceiptErrorMessages($scope.itemList[count].sku,
quickCode).then(function (response) {
console.log(count)
}
})(i)

关于javascript - AngularJS - 即使数组中只有一项,循环也会错误地递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43912243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com