Dalam senario ini, pengguna sedang melakukan carian jenis hadapan, dan setiap ketukan kekunci mencetuskan panggilan belakang baharu. Apabila pengguna menaip lebih pantas, permintaan lama menjadi tidak relevan dan perlu dibatalkan.
Janji dalam ES6, seperti yang sedia ada pada masa ini, tidak menyokong pembatalan di luar kotak. Walau bagaimanapun, terdapat kerja berterusan untuk memperkenalkan keupayaan pembatalan melalui AbortController, primitif merentas platform yang boleh membatalkan operasi tak segerak seperti permintaan rangkaian.
Sebagai pendekatan moden, AbortController menyediakan isyarat objek yang boleh digunakan untuk membatalkan fungsi yang mengembalikan janji. Sintaksnya kelihatan seperti ini:
<code class="javascript">async function somethingIWantToCancel({ signal } = {}) { // Use the signal object to manually adapt code for cancellation support const onAbort = (e) => { // Handle cancellation logic here }; signal.addEventListener('abort', onAbort, { once: true }); try { const response = await fetch('...', { signal }); } catch (e) { if (e.name === 'AbortError') { // Deal with cancellation in caller } else { throw e; } } finally { signal.removeEventListener('abort', onAbort); } }</code>
Dalam contoh ini, fungsi somethingIWantToCancel mengambil parameter isyarat, yang merupakan contoh AbortController. Pendengar signal.addEventListener mendaftarkan pengendali acara untuk acara batalkan, yang dicetuskan apabila operasi dibatalkan. Blok akhirnya memastikan pendengar acara dialih keluar apabila operasi selesai.
Jika AbortController bukan pilihan, pendekatan lain ialah menggunakan perpustakaan pihak ketiga seperti Bluebird, yang menyediakan keupayaan pembatalan.
Alternatif lain ialah menggunakan token pembatalan. Ini melibatkan penghantaran fungsi kepada kaedah yang boleh dipanggil untuk membatalkan permintaan.
Walaupun janji ES6 tidak mempunyai sokongan pembatalan asli, AbortController dan alternatif lain menyediakan cara untuk membatalkan operasi tak segerak dalam JavaScript moden. Untuk senario lama, menggunakan token pembatalan atau pustaka pihak ketiga masih boleh memberikan penyelesaian.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membatalkan Janji dalam JavaScript untuk Carian Ke Hadapan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!