Ada API baru untuk membuat permintaan dari JavaScript: fetch (). Apakah ada mekanisme bawaan untuk membatalkan permintaan ini dalam penerbangan?
javascript
ajax
fetch-api
Sam Lee
sumber
sumber
Jawaban:
TL / DR:
fetch
sekarang mendukungsignal
parameter pada 20 September 2017, tetapi tidak semua browser mendukung hal ini saat ini .UPDATE 2020: Sebagian besar browser utama (Edge, Firefox, Chrome, Safari, Opera, dan beberapa lainnya) mendukung fitur ini , yang telah menjadi bagian dari standar hidup DOM . (per 5 Maret 2020)
Ini adalah perubahan yang akan segera kami temui, jadi Anda harus dapat membatalkan permintaan dengan menggunakan
AbortController
sAbortSignal
.Versi Panjang
Bagaimana cara:
Cara kerjanya adalah ini:
Langkah 1 : Anda membuat
AbortController
(Untuk saat ini saya baru saja menggunakan ini )const controller = new AbortController()
Langkah 2 : Anda mendapatkan
AbortController
sinyal seperti ini:const signal = controller.signal
Langkah 3 : Anda lulus
signal
untuk mengambil seperti:Langkah 4 : Batalkan saja kapan pun Anda perlu:
controller.abort();
Berikut ini contoh cara kerjanya (berfungsi di Firefox 57+):
Sumber:
sumber
AbortController is not defined
. Pokoknya ini hanya bukti konsep, setidaknya orang-orang dengan Firefox 57+ dapat melihatnya berfungsihttps://developers.google.com/web/updates/2017/09/abortable-fetch
https://dom.spec.whatwg.org/#aborting-ongoing-activities
bekerja di edge 16 (2017-10-17), firefox 57 (2017-11-14), desktop safari 11.1 (2018-03-29), ios safari 11.4 (2018-03-29), chrome 67 (2018-05-29) -29), dan nanti.
pada browser lama, Anda dapat menggunakan polyfill whatwg-fetch github dan AbortController polyfill . Anda dapat mendeteksi browser yang lebih lama dan menggunakan polyfill secara kondisional juga:
sumber
Mulai Februari 2018,
fetch()
dapat dibatalkan dengan kode di bawah ini di Chrome (baca Menggunakan Aliran yang Dapat Dibaca untuk mengaktifkan dukungan Firefox). Tidak ada kesalahan yang dilemparkan untukcatch()
mengambil, dan ini adalah solusi sementara sampaiAbortController
sepenuhnya diadopsi.sumber
Adapun saat ini tidak ada solusi yang tepat, seperti kata @spro.
Namun, jika Anda memiliki respons dalam penerbangan dan menggunakan ReadableStream, Anda dapat menutup streaming untuk membatalkan permintaan.
sumber
Mari polyfill:
Perlu diingat bahwa kode ini tidak diuji! Beri tahu saya jika Anda telah mengujinya dan ada yang tidak berhasil. Mungkin memberi Anda peringatan bahwa Anda mencoba untuk menimpa fungsi 'fetch' dari perpustakaan resmi JavaScript.
sumber