」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何使用 jQuery Promises 連結多個非同步呼叫?

如何使用 jQuery Promises 連結多個非同步呼叫?

發佈於2024-11-22
瀏覽:881

How to Chain Multiple Asynchronous Calls using jQuery Promises?

使用 jQuery Promises 連結三個非同步呼叫

在非同步程式設計中,連續對 API 或伺服器進行多次呼叫是很常見的。為了有效地處理這些調用,最好將它們連結在一起,確保每個調用在執行下一個調用之前完成。有了 jQuery Promise,這個連結過程就可以輕鬆完成。

考慮以下場景,其中需要依次進行三個 HTTP 調用,並且需要將資料從一個調用傳遞到另一個調用:

function first() {
    ajax();
}

function second() {
    ajax();
}

function third() {
    ajax();
}

function main() {
    first().then(second).then(third);
}

在此範例中,目的是進行第一次調用,等待其完成,然後使用第一次調用的結果進行第二次調用,最後使用第一次調用的結果進行第三次呼叫第二次通話。但是,此程式碼不會按預期工作。為了正確連結這些調用,正確使用 jQuery Promise 是必要的。

function first() {
    var deferred = $.Deferred();
    $.ajax({
        "success": function(resp) {
            deferred.resolve(resp);
        },
    });
    return deferred.promise();
}

function second(foo) {
    $.ajax({
        "success": function(resp) {
            // do something with the resp
        },
        "error": function(resp) {
            // handle the error
        },
    });
}

first().then(function(foo) {
    second(foo);
});

這段程式碼提供了部分解決方案,但仍然沒有實現三個函數的連結。連結多個呼叫的關鍵在於傳回每個函數中 $.ajax() 傳回的 jqXHR 物件。這些物件與 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);
}

在此修改後的程式碼中,每個 $.ajax() 呼叫傳回的 jqXHR 物件代表對應函數的 Promise。這允許函數按順序鏈接,一個函數的輸出作為輸入傳遞給下一個函數。

參數 data、textStatus 和 jqXHR 來自前一個函數中的 $.ajax() 呼叫。例如,first() 提供 secondary(),second() 提供third(),傳遞任何相關資料。

要查看此連結的實際效果,請使用 $.when('foo' 進行現場演示)以兌現承諾,如下所示。

最新教學 更多>
  • 如何使用替換指令在GO MOD中解析模塊路徑差異?
    如何使用替換指令在GO MOD中解析模塊路徑差異?
    在使用GO MOD時,在GO MOD 中克服模塊路徑差異時,可能會遇到衝突,其中可能會遇到一個衝突,其中3派對軟件包將另一個帶有導入套件的path package the Imptioned package the Imptioned package the Imported tocted pac...
    程式設計 發佈於2025-04-14
  • 在C#中如何高效重複字符串字符用於縮進?
    在C#中如何高效重複字符串字符用於縮進?
    在基於項目的深度下固定字符串時,重複一個字符串以進行凹痕,很方便有效地有一種有效的方法來返回字符串重複指定的次數的字符串。使用指定的次數。 constructor 這將返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.W...
    程式設計 發佈於2025-04-14
  • 如何檢查對像是否具有Python中的特定屬性?
    如何檢查對像是否具有Python中的特定屬性?
    方法來確定對象屬性存在尋求一種方法來驗證對像中特定屬性的存在。考慮以下示例,其中嘗試訪問不確定屬性會引起錯誤: >>> a = someClass() >>> A.property Trackback(最近的最新電話): 文件“ ”,第1行, attributeError:SomeClass實...
    程式設計 發佈於2025-04-14
  • Go 1.5之前與之後`runtime.Gosched()`對Go程序執行的影響
    Go 1.5之前與之後`runtime.Gosched()`對Go程序執行的影響
    How Gosched Affects the Execution of Go ProgramsProblemIn Go versions prior to 1.5, a piece of code involving runtime.Gosched() was observed to affect...
    程式設計 發佈於2025-04-14
  • 在Python中如何創建動態變量?
    在Python中如何創建動態變量?
    在Python 中,動態創建變量的功能可以是一種強大的工具,尤其是在使用複雜的數據結構或算法時,Dynamic Variable Creation的動態變量創建。 Python提供了幾種創造性的方法來實現這一目標。 利用dictionaries 一種有效的方法是利用字典。字典允許您動態創建密鑰並...
    程式設計 發佈於2025-04-14
  • 如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解決方案: args)拋出異常{ 日曆cal = calendar.getInstance(); SimpleDateFormat SDF =新的SimpleDateFormat(“...
    程式設計 發佈於2025-04-14
  • 如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    postgresql:為每個唯一標識符提取最後一行,在Postgresql中,您可能需要遇到與在數據庫中的每個不同標識相關的信息中提取信息的情況。考慮以下數據:[ 1 2014-02-01 kjkj 在數據集中的每個唯一ID中檢索最後一行的信息,您可以在操作員上使用Postgres的有效效率: ...
    程式設計 發佈於2025-04-14
  • 網站與眾不同的三種方法
    網站與眾不同的三種方法
    [2 在當今的數字景觀中,乾淨而簡單的網頁設計是常態。 為了真正使您的網站脫穎而出,請考慮以下三個關鍵差異化: 無與倫比的視覺效果:超出了標準UI向量編輯器(如Figma和Sketch)的功能。 創建真正獨特且迷人的視覺效果。 驚人的動畫:開發動畫,超越簡單矩形佈局的局限性。 既美麗又引人入勝...
    程式設計 發佈於2025-04-14
  • 您如何在Laravel Blade模板中定義變量?
    您如何在Laravel Blade模板中定義變量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配變量對於存儲以後使用的數據至關重要。在使用“ {{}}”分配變量的同時,它可能並不總是最優雅的解決方案。 幸運的是,Blade通過@php Directive提供了更優雅的方法: $ old_section =...
    程式設計 發佈於2025-04-14
  • 在Go中如何檢測通道是否已滿?
    在Go中如何檢測通道是否已滿?
    檢測完整的緩衝通道確定是否滿是完整的方法是將SELECT語句與默認條款一起使用Select語句。這是一個示例: package main 導入“ FMT” func main(){ ch:= make(chan int,1) //填充 ch
    程式設計 發佈於2025-04-14
  • 如何正確使用與PDO參數的查詢一樣?
    如何正確使用與PDO參數的查詢一樣?
    在pdo 中使用類似QUERIES在PDO中的Queries時,您可能會遇到類似疑問中描述的問題:此查詢也可能不會返回結果,即使$ var1和$ var2包含有效的搜索詞。錯誤在於不正確包含%符號。 通過將變量包含在$ params數組中的%符號中,您確保將%字符正確替換到查詢中。沒有此修改,PD...
    程式設計 發佈於2025-04-14
  • \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    答案: 在大多數現代編譯器中,while(1)和(1)和(;;)之間沒有性能差異。編譯器: perl: 1 輸入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    程式設計 發佈於2025-04-14
  • 如何配置Pytesseract以使用數字輸出的單位數字識別?
    如何配置Pytesseract以使用數字輸出的單位數字識別?
    Pytesseract OCR具有單位數字識別和僅數字約束 在pytesseract的上下文中,在配置tesseract以識別單位數字和限制單個數字和限制輸出對數字可能會提出質疑。 To address this issue, we delve into the specifics of Te...
    程式設計 發佈於2025-04-14
  • Go web應用何時關閉數據庫連接?
    Go web應用何時關閉數據庫連接?
    在GO Web Applications中管理數據庫連接很少,考慮以下簡化的web應用程序代碼:出現的問題:何時應在DB連接上調用Close()方法? ,該特定方案將自動關閉程序時,該程序將在EXITS EXITS EXITS出現時自動關閉。但是,其他考慮因素可能保證手動處理。 選項1:隱式關閉終...
    程式設計 發佈於2025-04-14
  • 如何克服PHP的功能重新定義限制?
    如何克服PHP的功能重新定義限制?
    克服PHP的函數重新定義限制在PHP中,多次定義一個相同名稱的函數是一個no-no。嘗試這樣做,如提供的代碼段所示,將導致可怕的“不能重新列出”錯誤。 但是,PHP工具腰帶中有一個隱藏的寶石:runkit擴展。它使您能夠靈活地重新定義函數。 runkit_function_renction_...
    程式設計 發佈於2025-04-14

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3