Комментарии 1
document.querySelector("#abort").addEventListener("click", () => controller.abort());
Сам addEventListener, кстати тоже можно отписывать при помощи AbortController, что тоже бывает полезно:
useEffect(() => {
const controller = new AbortController()
const signal = controller.signal
window.addEventListener('resize', handleResize, { signal })
window.addEventListener('hashchange', handleHashChange, { signal })
window.addEventListener('storage', handleStorageChange, { signal })
return () => controller.abort()
}, [])Ну и если поддержки AbortController пока нет, то никто не мешает её добавить:
import { TransactionRollbackError } from 'drizzle-orm'
function makeCancelableTransaction(db) {
return (callback, options = {}) => {
return db.transaction((tx) => {
return new Promise((resolve, reject) => {
// Rollback this transaction if the abort event is dispatched.
options.signal?.addEventListener('abort', async () => {
reject(new TransactionRollbackError())
})
return Promise.resolve(callback.call(this, tx)).then(resolve, reject)
})
})
}
}Зарегистрируйтесь на Хабре, чтобы оставить комментарий
AbortController в JavaScript