Javascript for循环不等待函数响应

时间:2016-01-18 14:44:38

标签: javascript

我正在使用循环和内部我正在调用一个函数但是当我检查控制台时,for循环不等待函数响应,我的意思是循环在函数响应之前完成。这是代码:

 $scope.increment = 0;
 var count = 0;
 $scope.passingDistance = [];
 $scope.resultsDetails = [];

 for (var i = 0; i < $scope.latitude.length; i++) {
   console.log("i-:", i);
   var lati = $scope.latitude[i];

   for (var j = 0; j < $scope.longitude.length; j++) {
     console.log("j", $scope.increment);
     var longi = $scope.longitude[$scope.increment];
     $scope.getDistance(lati, longi);
     // here I want to wait for loop until
     // I am not getting this function return value...
     $scope.increment = $scope.increment + 1;
     break;
   }
 }

2 个答案:

答案 0 :(得分:0)

Google API函数service.getDistanceMatrix是异步的。

使用这些异步函数,您经常会找到一个名为callback的最后一个参数,因为您的代码不会等待此函数的答案。

Maps API正如您在此处看到的那样,service.getDistanceMatrix中还有一个回调函数。现在,您还必须在包装函数中包含此回调。

使用此功能,您可以像这样修改代码

// lati, longi, callback (is just a function witch runs at the end)
$scope.getDistance(lati, longi, function(){
     `//here i want to wait for loop until i am not getting this function return value...`
});

答案 1 :(得分:0)

service.getDistanceMatrix是异步的。您必须正确地使用callback重写代码,或者执行以下不建议的锁定:

$scope.lock = true;
$scope.getDistance(lati, longi, function(){
   $scope.lock = false; 
});
while($scope.lock){
    setTimeout(function(){
       ;
    }, 10);
}

将锁定功能传递给service.getDistanceMatrix作为回叫

编辑:澄清使用回调。 重写$scope.getDistance,如下所示:

$scope.getDistance = function(lati, longi, callback){
    // other code
    service.getDistanceMatrix({Your_parameters},callback);
}