Rumah > hujung hadapan web > tutorial js > Bolehkah Janji Dibatalkan? Menyelam Dalam Mekanisme Pembatalan dalam JavaScript

Bolehkah Janji Dibatalkan? Menyelam Dalam Mekanisme Pembatalan dalam JavaScript

DDD
Lepaskan: 2024-11-02 22:47:03
asal
664 orang telah melayarinya

 Can Promises Be Cancelled? A Deep Dive into Cancellation Mechanisms in JavaScript

Janji - adakah mungkin untuk membatalkan janji secara paksa

ES6 berjanji sendiri tidak menyokong pembatalan. Walau bagaimanapun, terdapat kerja sedang dijalankan untuk menambah pembatalan pada janji dalam standard ECMAScript.


Cadangan pembatalan janji telah dibuat dalam spesifikasi WHATWG untuk disertakan dalam versi JavaScript ES2021 yang akan datang. Cadangan ini memperkenalkan antara muka AbortController baharu yang boleh digunakan untuk membatalkan janji.


<br>const abortController = new AbortController();<br>const promise = fetch('https://example.com', {<br> isyarat: abortController.signal<br>});</p>
<p>abortController.abort();<br></ pra><br><p>Dalam JavaScript moden, anda boleh menggunakan AbortController untuk membatalkan tugas berasaskan Promise, seperti permintaan mengambil atau operasi async lain.</p></p>
<p><p>Walau bagaimanapun, jika anda tidak dapat menggunakan AbortController, adalah mungkin untuk melaksanakan mekanisme pembatalan anda sendiri untuk operasi yang dimulakan oleh pengguna, seperti dalam kes penyerahan borang async atau permintaan rangkaian.</p><br><p><strong>Mencipta mekanisme pembatalan tersuai dalam JavaScript</strong>: Anda boleh melaksanakan mekanisme pembatalan mudah dengan:</p><br><ul><br><li>Mencipta Token Pembatalan yang membolehkan anda membatalkan operasi.</li><br><li>Melalukan PembatalanToken kepada tugas async yang anda mahu batalkan.</li><br><li>Membatalkan Token Pembatalan apabila pengguna memulakan pembatalan.< /li><br></ul><br><p>Token Pembatalan boleh dilaksanakan sebagai Janji dengan kaedah cancel() yang menolak Janji. Berikut ialah contoh:</p><br><pre class="lang-js prettyprint-override"><br>const cancellationToken = new Promise((resolve, reject) => {<br> return { </p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">cancel: () => reject(new Error('Operation has been cancelled.'))
Salin selepas log masuk
Salin selepas log masuk

}
});

Kemudian anda boleh menghantar cancellationToken kepada tugas async yang ingin anda batalkan, seperti ini:< ;/p>

<br>const asyncTask = (cancellationToken) => {<br> // Laksanakan tugas async anda di sini<br> return fetch('https://example.com', {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">cancel: () => reject(new Error('Operation has been cancelled.'))
Salin selepas log masuk
Salin selepas log masuk

});
}

Dan akhirnya, anda boleh membatalkan tugas async dengan memanggil kaedah cancel() pada cancellationToken, seperti ini :


<br>cancellationToken.cancel();<br>

Menggunakan pustaka pihak ketiga: Jika anda ingin menggunakan pustaka pihak ketiga untuk melaksanakan pembatalan, anda boleh menggunakan pustaka seperti bluebird atau rxjs. Berikut ialah contoh menggunakan bluebird:


<br>const Promise = require('bluebird');<br>const cancellationToken = Janji baharu .CancellationToken();</p>
<p>const asyncTask = () => {<br> return fetch('https://example.com', {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">signal: cancellationToken.signal
Salin selepas log masuk

});
}

cancellationToken.cancel();
< ;/pre>

Ini hanyalah beberapa cara untuk melaksanakan pembatalan dalam JavaScript. Pendekatan terbaik akan bergantung pada keperluan khusus anda.

Atas ialah kandungan terperinci Bolehkah Janji Dibatalkan? Menyelam Dalam Mekanisme Pembatalan dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Artikel sebelumnya:Bagaimana untuk Mendapatkan Warna RGB Piksel Kanvas Di Bawah Kursor Tetikus? Artikel seterusnya:Bagaimana untuk Menghalang API Peta Google OVER_QUERY_LIMIT Ralat dalam v3?
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
Artikel terbaru oleh pengarang
Isu terkini
Topik-topik yang berkaitan
Lagi>
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan