Вы близки, но функции when
, then
и done
зависят от обещаний.Вы не возвращаете никаких обещаний в своем коде, поэтому он просто выполняется.
Во-первых, вам необходимо получить результат обещания после его выполнения в функции done
на главной странице.Мы сделаем это, добавив параметр response
к обратному вызову, а затем передав его до webFormFunction
.
$(document).ready(function(){
$.when(masterPageFunction()).done(function(response){
webFormFunction(response);
});
})
Далее, нам нужно добавить обещание к masterPageFunction
и вернуть его.Вы разрешаете обещание ответом, который хотите отправить обратно в функцию done
на своей главной странице.Вот так:
function masterPageFunction() {
// Create the promise
var deferred = $.Deferred();
//In this function i call 2 ajax like this
$.ajax({
type: "POST",
url: "/api/master/xxx/",
data: JSON.stringify(obj),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
$.ajax({
type: "POST",
url: "/api/master/xxx2/",
data: JSON.stringify(obj),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
// Resolve the promise with the response from $.ajax
deferred.resolve(response);
}
});
}
});
// Return the promise (It hasn't been resolved yet!)
return deferred.promise();
}
Таким образом, webFormFunction
не будет вызываться до тех пор, пока не завершится второй вызов ajax, что разрешает обещание.