Обновить

Комментарии 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)
      })
    })
  }
}

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS