JavaScript-与第三方API的同步问题
我与第三方API存在同步问题 我的“for循环”似乎运行得很快,抛出了API请求 它可以以任何顺序返回数据 我如何重构它来忍受DoSomething是同步运行的JavaScript-与第三方API的同步问题,javascript,api,closures,Javascript,Api,Closures,我与第三方API存在同步问题 我的“for循环”似乎运行得很快,抛出了API请求 它可以以任何顺序返回数据 我如何重构它来忍受DoSomething是同步运行的 function startgeocoding() { for(var x = 0; x < address2.length; x++ ) { geocode(address); } } function geocode(address) { if (geocoder) {
function startgeocoding() {
for(var x = 0; x < address2.length; x++ ) {
geocode(address);
}
}
function geocode(address) {
if (geocoder) {
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
DoSomething();
}
}
}
函数启动geocoding(){
对于(var x=0;x
您可以在成功回调的下一个元素上调用geocode()
,以创建调用链。这些调用仍然是异步的,但在第一个调用完成之前,您不会对下一个调用进行地理编码。例如:
var addresses = [];
// this function really is optional, it's just copying an array
function startGeocoding() {
for (var x = 0; x < addresses2.length; x++) {
addresses.push(addresses2[x]);
}
geocode(addresses.shift());
}
function geocode(address) {
if (geocoder){
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
DoSomething();
if (addresses.length > 0) {
// take first value
geocode(addresses.shift());
}
}
});
}
}
var地址=[];
//这个函数实际上是可选的,它只是复制一个数组
函数startGeocoding(){
对于(var x=0;x0){
//取第一值
地理编码(addresses.shift());
}
}
});
}
}
另一种选择可能是保留原有方式,但将结果排队,以某种方式进行排序,然后在所有同步调用按您希望的顺序完成后对其进行处理。+1 damn对队列有相同的想法,但您的速度快了10倍:/