首頁 > web前端 > js教程 > 主體

承諾可以取消嗎?深入探討 JavaScript 中的取消機制

DDD
發布: 2024-11-02 22:47:03
原創
570 人瀏覽過

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

Promise - 是否可以強制取消 Promise

ES6 Promise 本身不支援取消。然而,在 ECMAScript 標準中加入取消承諾的工作正在進行中。


承諾取消提案已在 WHATWG 規格中提出,將包含在即將推出的 ES2021 版本的 JavaScript 中。此提案引入了一個新的 AbortController 接口,可用於取消 Promise。


<br>const abortController = new AbortController();<br>const Promise = fetch('https://example.com', { <br> signal: abortController.signal<br>});</p><p>abortController.abort();<br></ pre><br><p>在現代JavaScript 中,您可以使用AbortController 基於Promise 的任務,例如取得請求或其他非同步操作。 </p></p><p><p>但是,如果您無法使用 AbortController,則可以為使用者啟動的操作實現您自己的取消機制,例如非同步表單提交或網路請求的情況。 </p><br><p><strong>在JavaScript 中建立自訂取消機制</strong>:您可以透過以下方式實現簡單的取消機制:</p><br><ul><br>< li>建立一個CancellationToken,允許您取消操作。 </li><br><li>將 CancellationToken 傳遞給要取消的非同步任務。 </li><br><li>當使用者啟動取消時,取消 CancellationToken。 < /li><br></ul><br><p>CancellationToken 可以實作為 Promise,並使用 cancel() 方法來拒絕 Promise。以下是範例:</p><br><pre class="lang-js Prettyprint-override"><br>const CancelToken = new Promise((resolve,reject) => {<br> return { </p> <pre class="brush:php;toolbar:false">cancel: () => reject(new Error('Operation has been cancelled.'))
登入後複製

}
});

然後你可以將cancelToken傳遞給你想要取消的非同步任務,就像這樣:< ;/p>

<br>const asyncTask = (cancellationToken) =>; {<br> // 在這裡實現非同步任務<br> return fetch('https:// example.com', {</p><pre class="brush:php;toolbar:false">cancel: () => reject(new Error('Operation has been cancelled.'))
登入後複製

});
}

最後,你可以透過呼叫cancelToken上的cancel()方法來取消非同步任務,就像這樣:

<br>cancellationToken.cancel();<br>
登入後複製

使用第三方函式庫 :如果想使用第三方函式庫來實作取消,可以使用bluebird或rxjs這樣的函式庫。以下是使用bluebird 的範例:


<br>const Promise = require('bluebird');<br>const CancellationToken = new Promise . CancellationToken();</p><p>const asyncTask = () =>; {<br> return fetch('https://example.com', {</p><pre class="brush:php;toolbar:false">signal: cancellationToken.signal
登入後複製

});
}

cancellationToken.cancel();
< ;/pre>

這些只是在JavaScript 中實現取消的幾種方法。最佳方法將取決於您的特定需求。

以上是承諾可以取消嗎?深入探討 JavaScript 中的取消機制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板