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

Bolehkah Janji Dibatalkan? Menyelam Dalam Mekanisme Pembatalan dalam JavaScript

DDD
DDDasal
2024-11-02 22:47:03571semak imbas

 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>
<pre class="brush:php;toolbar:false">cancel: () => reject(new Error('Operation has been cancelled.'))

}
});

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>
<pre class="brush:php;toolbar:false">cancel: () => reject(new Error('Operation has been cancelled.'))

});
}

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>
<pre class="brush:php;toolbar:false">signal: cancellationToken.signal

});
}

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!

Kenyataan:
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