For-Loop内的回送回调

时间:2017-01-30 00:03:53

标签: javascript angularjs

在for循环中,我调用一个loopback函数(model.find())并使用回调方法。在这个方法中,我需要for循环的i变量来指定一个变量但是它不能从闭包中访问。 我已经尝试在回调函数后面写(i)call(this,i),但它没有用。

for (var i = 0; i < $scope.objects.length; i++) {
                    Priority.find({
                        filter: {
                            where: {priority: $scope.selectedPriority[i].priority}
                        }
                    }, function (prios) {
                            Priority.create({"priority": $scope.selectedPriority[i].priority //i is not accessible
                            }, function (priority) {
                                $scope.selectedPriority[i].priority = undefined; //i is not accessible
                            }, function (error) {
                                console.log(error);
                            });
                        }
                    });

        }

1 个答案:

答案 0 :(得分:0)

实际上&#34;我&#34;应该定义但是你总是会找到它的最高值(= $ scope.objects.length - 1),原因是因为Priority.find是异步的,一旦它返回一个答案,for循环就已经完成迭代。

要解决它,你可以把循环体放在一个函数中:

 function find(i) {
    Priority.find({
                            filter: {
                                where: {priority: $scope.selectedPriority[i].priority}
                            }
                       }, function (prios) {
                               Priority.create({"priority": $scope.selectedPriority[i].priority //i is not accessible
                               }, function (priority) {
                                  $scope.selectedPriority[i].priority = undefined; //i is not accessible
                              }, function (error) {
                                 console.log(error);
                              });
                         }
                      });
}

那么,for循环变为:

for (var i = 0; i < $scope.objects.length; i++) {
    find(i);
}
基本上,你是&#34;捕捉&#34; &#34; i&#34;的价值并将其作为函数参数发送,只要您在特定函数调用的上下文中,我就会保持不变。