Merangkai Tiga Panggilan Asynchronous dengan jQuery Promises
Dalam soalan ini, kami meneroka senario di mana anda mempunyai tiga permintaan HTTP tak segerak untuk dibuat dalam secara segerak dan anda perlu menghantar data dari satu panggilan ke panggilan seterusnya.
Pendekatan Awal:
Seperti yang dinyatakan dalam soalan, anda cuba menggunakan penangguhan untuk dua fungsi pertama. Ini adalah permulaan yang baik, tetapi ia hanya meliputi kes dua fungsi. Melanjutkannya kepada tiga fungsi memerlukan pendekatan yang sedikit berbeza.
Merantai dengan Objek JqXHR:
Kunci untuk merantai berbilang panggilan tak segerak ialah mengembalikan objek jqXHR yang dikembalikan sebanyak $ .ajax() dalam setiap fungsi. Objek ini serasi dengan Promise dan boleh dirantai menggunakan .then()/.done()/.fail()/.always().
Kod Kemas Kini:
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); }
Dalam kod yang dikemas kini ini, fungsi first() mengembalikan objek jqXHR daripada panggilan AJAXnya, yang kemudiannya dihantar sebagai hujah kepada fungsi second(). Fungsi kedua() pula, mengembalikan objek jqXHRnya, yang dihantar ke fungsi ketiga().
Melalui Data Antara Fungsi:
Data argumen , textStatus dan jqXHR timbul daripada panggilan $.ajax() dalam fungsi sebelumnya. Ini bermakna first() suapan second(), dan second() suapan third(). Oleh itu, anda boleh menggunakan hujah ini untuk menghantar data daripada satu fungsi ke fungsi seterusnya.
Demo:
Kod di bawah menunjukkan rantaian tiga panggilan tak segerak menggunakan janji jQuery . Ia menggunakan $.when('foo') untuk menyampaikan janji yang ditepati sebagai ganti $.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" });
Atas ialah kandungan terperinci Bagaimanakah anda boleh merantai tiga panggilan tak segerak dalam jQuery menggunakan Janji, menghantar data dari satu panggilan ke panggilan seterusnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!