使用jQuery Promises 連結三個非同步呼叫
在這個問題中,我們探討了一個場景,其中您要在一個同步方式,而您需要將資料從一次呼叫傳遞到
初始方法:
正如問題中提到的,您嘗試對前兩個函數使用延遲。這是一個好的開始,但它只涵蓋了兩個函數的情況。將其擴展到三個函數需要稍微不同的方法。
與 JqXHR 物件連結:
連結多個非同步呼叫的關鍵是傳回 $ 傳回的 jqXHR 物件每個函數中的 .ajax() 。這些物件與 Promise 相容,可以使用 .then()/.done()/.fail()/.always() 進行連結。
更新的程式碼:
function first() { return $.ajax(...); } function second(data, textStatus, jqXHR) { return $.ajax(...); } function third(data, textStatus, jqXHR) { return $.ajax(...); } function main() { first().then(second).then(third); }
在此更新的程式碼中,first() 函數從其AJAX 呼叫返回jqXHR 對象,然後將其作為參數傳遞給第二個()函數。第二個()函數依序傳回其 jqXHR 對象,該物件被傳遞給第三個()函數。
在函數之間傳遞資料:
參數資料、textStatus 和 jqXHR 由上一個函數中的 $.ajax() 呼叫產生。這意味著first() 提供第二個(),第二個() 提供第三個()。因此,您可以使用這些參數將資料從一個函數傳遞到下一個函數。
示範:
下面的程式碼示範了使用 jQuery Promise 連結三個非同步呼叫。它使用 $.when('foo') 來代替 $.ajax(...).
function first() { return $.when('foo'); } function second(data) { return $.when('bar' + data); } function third(data) { return $.when('baz' + data); } first().then(second).then(third) .done(function(data) { console.log(data); // Logs "bazbarfoo" });
以上是如何使用 Promises 在 jQuery 中連結三個非同步調用,將資料從一個調用傳遞到下一個調用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!