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()方法來取消非同步任務,就像這樣: p>
<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中文網其他相關文章!