window.set同步处理异步调用的超时

window.setTimeout for processing async calls synchronous?

本文关键字:调用 超时 异步 处理 set 同步 window      更新时间:2023-09-26

我正在开发一个Google Maps API功能,该功能包含了在方向结果的某个点获取高程。这对于较小的路线来说是可以的,但具有更多路径的较大路线会成为一个问题。因此,我将总路径拆分为单独的批处理来执行,但有时它们会以随机顺序返回。这是由于Google Elevation Service是异步调用的(没有其他方法)。

所需的结果是在所有批次完成时输出高程数据(即使只是一个批次)。所以我想加入window.setTimeout来按顺序处理调用,但我想知道两件事:

  1. 这是一个好方法,还是有更好的选择
  2. 我正在包装和包装功能,但最终没有什么好东西。也许有人能给我指明正确的方向?下面是我的伪方法。

    函数getElevationData(){var elevate=新的google.maps.ElectionService();var batchSize=250;var elevationBatches=Math.ceil(directions.routes[0].overview_path/batchSize);

    for(var i=0;i<elevationBatches;i++){var thisBatch=[];

    for(var = j = i * batchSize; j < i * batchSize + batchSize; j++) {
      if(j < directions.routes[0].overview_path.length) {
        thisBatch.push(directions.routes[0].overview_path[j]);
      } else { 
        break;
      }
    }
    getElevationBatchData(elevator, i, batchData);
    

    }}

    函数getElevationBatchData(升降机、批次、数据){window.setTimeout(function(){//检查是否已完成。。?如果没有,请重新启动此功能?

    elevator.getElevationAlongPath({
      path: data,
      samples: 256
    }, function(elevations, status) {
      // process the result (basically checking for status OK, concatenating and adding rows to the DataTable
    }
    

    },100);}

不知怎么的,很抱歉代码标记;当我在SO的编辑器中键入更多的伪代码时,将不再应用正确的代码格式。。。

为什么不能并行运行所有请求(即使用setTimeout方法,但在这里很可能没有必要),然后在所有请求完成并返回部分结果时显示整体结果?

 function onRequestComplete(index, context) {
    alreadyProcessed++;
    if (alreadyProcessed == totalNumOfRequests) {
        showResults();
    }
    batches[index].data = context;
 }
 function doAsyncRequest(index) {
    someObject.doAsyncRequest(batches[index], function (err, data) {
        onRequestComplete(index, data);
    });
 }
 for(var i=0;i<totalNumOfRequests;i++){
     doAsyncRequest(i);
 };