Javascript 通过谷歌地图api对地址进行编码并推迟结果
我正在使用谷歌地图API对两个地址进行地理编码。我延迟返回的结果,并使用Javascript 通过谷歌地图api对地址进行编码并推迟结果,javascript,jquery,google-maps-api-3,jquery-deferred,.when,Javascript,Jquery,Google Maps Api 3,Jquery Deferred,.when,我正在使用谷歌地图API对两个地址进行地理编码。我延迟返回的结果,并使用$.when().then()方法在获得字符串地址的坐标后执行逻辑。问题是API总是返回已解决的结果,即使有错误。例如,如果没有internet连接,而不是请求超时,我得到的状态为ERROR,结果为null,或者如果输入的地址无效,我得到的状态为ZERO\u RESULTS,结果为空数组[]。由于我只对获得正确的坐标结果感兴趣,所以我想将所有其他响应作为地理编码错误处理,我不知道如何处理。您还可以看到,由于同样的问题,我必须
$.when().then()
方法在获得字符串地址的坐标后执行逻辑。问题是API总是返回已解决的结果,即使有错误。例如,如果没有internet连接,而不是请求超时,我得到的状态为ERROR
,结果为null
,或者如果输入的地址无效,我得到的状态为ZERO\u RESULTS
,结果为空数组[]
。由于我只对获得正确的坐标结果感兴趣,所以我想将所有其他响应作为地理编码错误处理,我不知道如何处理。您还可以看到,由于同样的问题,我必须在地理编码之前检查输入字段是否为空
我刚刚熟悉异步流,需要一些指导。
我正在使用jQuery1.9.2和GoogleMapsAPIV3。(我可以硬编码所有的条件,但我想提高我的编码技能,并有一些更通用的。这是可能的。)
我也会在这里给出我的代码
function geocode(addString) {
var deferred = $.Deferred();
var geocoder = new google.maps.Geocoder();
var request = {
address: addString
};
geocoder.geocode(request, function(results, status) {
if (status === google.maps.GeocoderStatus.OK) {
deferred.resolve(results[0].geometry.location);
}
else {
// no idea what to do here
}
});
return deferred;
}
function Options() {
var origin = $("#origin-field").val();
var destination = $("#destination-field").val();
if (origin != "" && destination != ""){
var originCoords = geocode(origin);
var destinationCoords = geocode(destination);
$.when(originCoords, destinationCoords)
.then(function(originCoordinates, destinationCoordinates) {
console.log(originCoordinates.lat() + ',' + originCoordinates.lng());
console.log(destinationCoordinates.lat() + ',' + destinationCoordinates.lng());
}, function() {
toastMessage("Geo-coding error");
});
}
else {
toastMessage("Origin and/or Destination missing");
}
}
多亏了榜样,我解决了我的问题。正如我所说,我刚开始研究异步流,所以不知道如何解决这个简单的问题。 我所做的只是在else块中捕获所有非
OK
状态,并将其传递给deferred.reject()
方法。所以我的代码变成了这样
function geocode(addString) {
var deferred = $.Deferred();
var geocoder = new google.maps.Geocoder();
var request = {
address: addString
};
geocoder.geocode(request, function(results, status) {
if (status === google.maps.GeocoderStatus.OK) {
deferred.resolve(results[0].geometry.location);
}
else {
deferred.reject(status);
}
});
return deferred;
}
function Options() {
var origin = $("#origin-field").val();
var destination = $("#destination-field").val();
var originCoords = geocode(origin);
var destinationCoords = geocode(destination);
$.when(originCoords, destinationCoords)
.then(function(origin, destination) {
//some logic in case of success
}, function(status) {
toastMessage("Geo-coding error:" + status);
});
}
您可以查看文档中可能的状态代码列表: