Перейти к содержимому

Ошибки ​

Что случилосьЧто вы получите
Кода не существует, в get()null
Ничего не нашлось, в search(), filter(), dvCert()Пустая страница
API вернул ошибку или ответ не в JSONMxikError
Запрос длился дольше timeoutDOMException с именем TimeoutError
Запрос отменён через signalDOMException с именем AbortError
Нет сети, ошибка DNS, соединение отклоненоTypeError из fetch

«Не найдено» — не ошибка, так что try нужен только для остальных случаев.

MxikError ​

ts
import { MxikError } from 'mxik'

try {
  await mxik.search('кофе')
}
catch (error) {
  if (error instanceof MxikError) {
    error.status // HTTP-статус
    error.reason // сообщение от API, если оно есть
  }
}

API часто сообщает об ошибке со статусом HTTP 200 и success: false в теле ответа. Тогда status равен 200, а настоящее сообщение лежит в reason.

Таймауты и отмена ​

По умолчанию запрос прерывается через 10 секунд. Это можно изменить для клиента:

ts
const mxik = createMxik({ timeout: 3000 })

Или отменить отдельный запрос самому, например когда пользователь вводит следующую букву:

ts
let controller: AbortController | undefined

async function onInput(query: string) {
  controller?.abort()
  controller = new AbortController()

  try {
    const { items } = await mxik.search(query, { signal: controller.signal })
    render(items)
  }
  catch (error) {
    if (error instanceof DOMException && error.name === 'AbortError')
      return
    throw error
  }
}

И таймаут, и ваш signal выбрасывают DOMException, как и обычный fetch.

Неофициальный клиент, не связан с Налоговым комитетом Узбекистана и tasnif.soliq.uz.
Распространяется под лицензией MIT.