Вот моя (простая) проблема:Дождитесь окончания асинхронного вызова в функции JS. (jQuery.Deferred?)
У меня есть функция Javascript, которая вызывает внешний API, чтобы получить некоторый результат асинхронно. Мне нужно ждать этих результатов, потому что я хочу сделать некоторые тесты на них, чтобы определить, действительны они или нет, но Deferred
очень сложны для меня, и я не могу добиться успеха.
Вот что я сделал:
$("#step-content").steps({
//some parameters
onStepChanging: function(event, currentIndex, newIndex) {
verifyAddress().done(function(test) {
if($("#hdnLatitude").val() == "" || $("#hdnLongitude").val() == "")
test = false;
else
test = true;
console.log(test); // test is true or false, that's good
return test;
});
console.log(test); // test is always empty here
//Here, I just need to do return true or return false to block step-changing if there is an error.
return test;
}
});
В принципе, вот моя verifyAddress
функция:
function verifyAddress() {
var r = $.Deferred();
var geocoder = new google.maps.Geocoder();
if (geocoder) {
var adressToGeocode = /* Get the address to geocode */
geocoder.geocode({ 'address': adressToGeocode }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK)
{
//Save the lat/lng returned in #hdnLatitude and #hdnLongitude
}
r.resolve();
});
}
//Not sure where to place the return r ; try elsewhere but no success
return r;
}
Так что мне нужно ждать конца verifyAdress()
и получить # hdnLatitude и #hdnLongitude заполнено и возвращает true для false в onStepChanging
событие, чтобы определить, можем ли мы перейти к следующему шагу (адрес ОК), а не (добавить ress is wrong)
Я использую this SO question, чтобы лучше понять Deferred
, но я не могу добиться успеха.
Может ли кто-нибудь мне помочь?
Спасибо большое
функция
Как вернуться из асинхронной функции. Классика. Посмотрите [здесь] (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call), чтобы понять, почему вы не можете этого сделать. – dfsq
HI. Я знаю, что это классическая проблема для новичка, подобного мне, но мне действительно нужна помощь, чтобы понять проблему. Я видел эту ссылку, мне нужно передать обратный вызов моему методу 'verifyAddress()'? Я не могу понять основную логику ... – AlexB
Если возможно, можете отправлять сообщения «html», «call Google server»? Спасибо – guest271314