Javascript for loop不等待函数响应

Javascript for loop is not waiting for function response

本文关键字:函数 响应 等待 for loop Javascript      更新时间:2023-09-26

我正在使用循环,并且在内部我正在调用一个函数,但是当我检查控制台时,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;
   }
 }

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

对于这样的异步函数,你经常会找到一个名为 callback 的最后一个参数,因为你的代码不会等待这个函数的答案。

地图 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...`
});

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);
}