Я провел весь день читать о JQuery отсроченного, обещание и т.д.Javascript синхронного поток, когда есть вызов асинхронной функции
Моей проблема очень проста.
У меня есть одна функция, которая вызывает еще 4 функции, а некоторые из них имеют асинхронные вызовы для извлечения данных с сервера.
function A() {
async call
console.log("1");
}
function B() {
normal code
console.log("2");
}
function C() {
async call
console.log("3");
}
function xyz() {
A();
B();
C();
print str;
}
ожидаемый результат 123str.
вместо этого я получаю 312 или 213. В принципе, 3 функции не ждут конца другого. Я пробовал с .done с $ .when (a). Then (b), с обещанием.
Но ничего не работает. Может ли кто-нибудь дать мне простой пример кода, который работает?
EDIT:
function setId() {
var doc = sessionStorage.getItem("urlDoc");
var user = sessionStorage.getItem("LoggedUser");
var string = "urlDoc=" + doc + "&user=" + user;
if (sessionStorage.getItem("countId") === null) {
$.ajax({
type: 'POST',
url: 'php/findTemporaryId.php',
data: string,
success: function (data) {
sessionStorage.setItem("countId", data);
countId = sessionStorage.getItem("countId");
id = countId;
console.log("1");
},
error: function() {
alert("Server Error");
}
});
} else {
sessionStorage.setItem("countId", parseInt(sessionStorage.getItem("countId")) + 1);
countId = sessionStorage.getItem("countId");
id = countId;
console.log("1");
}
затем
function setAuthor() {
author = sessionStorage.getItem('LoggedUser');
console.log("2");
}
затем
function getData() {
$.ajax({
type: 'POST',
url: 'php/date.php',
success: function (data) {
date = data;
console.log("3");
},
error: function() {
alert("Error");
}
});
}
это, как я называю их
function saveSelectionFragment() {
setId();
setAuthor();
getData();
}
здесь консоль firebug. http://i.imgur.com/zQ0Mk4E.jpg
Вы также можете отправить асинхронный вызов и обычный код – bugwheels94
Вы вызываете A() и немедленно вызываете B(). Необходимо иметь обратный вызов или возвращать обещание, и как только это обещание будет заполнено (или вызван обратный вызов), вам нужно позвонить B, а затем вызвать C (который будет таким же, как A) – yBrodsky
Такой же псевдокод: 'A(). (function() {B(); return C();}), затем (function() {print str;}); '. Предполагая, что 'A' и' C' возвращают обещания. –