我花了整整一天的時間閱讀關於jquery延期,promise等內容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個功能不等待另一個的結束。 (a)。然後(b),並且承諾。
但沒有什麼工作。有人能給我一個可用的準系統示例代碼嗎?
編輯:
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();
}
這裏的螢火蟲控制檯。 http://i.imgur.com/zQ0Mk4E.jpg
發佈異步調用和正常代碼 – bugwheels94
您調用A()並立即調用B()。需要進行回調或返回一個承諾,一旦該承諾完成(或稱爲回調),您需要調用B,然後調用C(與A相同) – yBrodsky
相同的僞代碼:'A()。then (function(){B(); return C();})。then(function(){print str;});'。假設'A'和'C'返回承諾。 –