[英]window.setTimeout for processing async calls synchronous?
我正在研究Google Maps API功能,该功能合并了在某个方向结果的某个点获取高程的功能。 这对于较小的路线很好,但是具有更多路径的较大路线成为问题。 因此,我将总路径分为多个批次来执行,但有时它们会以随机顺序返回。 这是由于Google海拔服务被异步调用(没有其他方法)导致的。
理想的结果是在所有批次完成后输出高程数据(即使只是一个批次)。 所以我想结合window.setTimeout来按顺序处理调用,但是我想知道两件事:
我正在包装功能,但是最终没有任何好处。 也许有人可以指出我正确的方向? 下面是我的伪方法。
函数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.