Bagaimana untuk Merangkai Berbilang Panggilan Asynchronous menggunakan jQuery Promises?

DDD
Lepaskan: 2024-10-28 12:58:02
asal
505 orang telah melayarinya

How to Chain Multiple Asynchronous Calls using jQuery Promises?

Merangkai Tiga Panggilan Asynchronous dengan Janji jQuery

Dalam pengaturcaraan tak segerak, adalah perkara biasa untuk membuat berbilang panggilan ke API atau pelayan secara berturut-turut. Untuk mengendalikan panggilan ini dengan cekap, adalah wajar untuk merantainya bersama-sama, memastikan setiap panggilan selesai sebelum panggilan seterusnya dilaksanakan. Dengan janji jQuery, proses rantaian ini boleh dicapai dengan mudah.

Pertimbangkan senario berikut, di mana tiga panggilan HTTP perlu dibuat mengikut turutan dan data perlu dihantar dari satu panggilan ke panggilan yang lain:

<code class="javascript">function first() {
    ajax();
}

function second() {
    ajax();
}

function third() {
    ajax();
}

function main() {
    first().then(second).then(third);
}</code>
Salin selepas log masuk

Dalam contoh ini, niatnya adalah untuk membuat panggilan pertama, tunggu sehingga selesai, kemudian buat panggilan kedua menggunakan hasil panggilan pertama, dan akhirnya buat panggilan ketiga menggunakan keputusan panggilan kedua. Walau bagaimanapun, kod ini tidak akan berfungsi seperti yang diharapkan. Untuk merantai panggilan ini dengan betul, penggunaan janji jQuery yang betul diperlukan.

<code class="javascript">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);
});</code>
Salin selepas log masuk

Kod ini menyediakan penyelesaian separa, tetapi rantaian untuk tiga fungsi masih tidak tercapai. Kunci untuk merantai berbilang panggilan terletak pada mengembalikan objek jqXHR yang dikembalikan oleh $.ajax() dalam setiap fungsi. Objek ini serasi Promise dan boleh dirantai menggunakan .then()/.done()/.fail()/.always().

<code class="javascript">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);
}</code>
Salin selepas log masuk

Dalam kod yang disemak ini, objek jqXHR dikembalikan oleh setiap panggilan $.ajax() mewakili Janji fungsi masing-masing. Ini membolehkan fungsi dirantai secara berurutan, dengan output satu fungsi dihantar sebagai input kepada yang seterusnya.

Data argumen, textStatus dan jqXHR timbul daripada panggilan $.ajax() dalam fungsi sebelumnya . Sebagai contoh, first() suapan second(), dan second() suapan third(), menyampaikan mana-mana data yang berkaitan.

Untuk melihat rantaian ini dalam tindakan, tunjuk cara langsung menggunakan $.when('foo' ) untuk menunaikan janji disediakan di bawah.

Atas ialah kandungan terperinci Bagaimana untuk Merangkai Berbilang Panggilan Asynchronous menggunakan jQuery Promises?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!