繁体   English   中英

window.setTimeout处理异步调用同步吗?

[英]window.setTimeout for processing async calls synchronous?

我正在研究Google Maps API功能,该功能合并了在某个方向结果的某个点获取高程的功能。 这对于较小的路线很好,但是具有更多路径的较大路线成为问题。 因此,我将总路径分为多个批次来执行,但有时它们会以随机顺序返回。 这是由于Google海拔服务被异步调用(没有其他方法)导致的。

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

  1. 这是一个好方法,还是有更好的选择?
  2. 我正在包装功能,但是最终没有任何好处。 也许有人可以指出我正确的方向? 下面是我的伪方法。

    函数getElevationData(){var lift = new google.maps.ElevationService(); var batchSize = 250; varlevationBatches = Math.ceil(directions.routes [0] .overview_path / batchSize);

    for(var i = 0; i <levationBatches; 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(elevator,batch,data){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);
 };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM