jqueryの延期、約束などについて一読しました。非同期関数呼び出しがある場合のJavaScriptの同期フロー
私の問題は本当に簡単です。
私は他の4つの関数を呼び出す関数が1つあり、そのうちのいくつかはサーバーからデータを取得するための非同期呼び出しを持っています。
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つの関数は、もう一方の終わりを待つことはありません。私は$ .when(a).then(b)と約束して.doneを試してみました。
しかし、何も動作しません。誰かが私にベアボーンのサンプルコードを与えることができますか?
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()を呼び出します。 Aコールバックが必要な場合や約束を返す必要がある場合は、Bを呼び出してC(Aと同じ)を呼び出す必要があります。 – yBrodsky
擬似コード:A()。 (function(){print str;}); '(function(){B(); return C();})。 'A'と' C'が約束を返すと仮定します。 –