Логотип Аурабаза
аурабазадокументы
документы›Edge Functions›Errors, timeouts and retries

Ошибки, тайм-ауты и повторные попытки

Как прочитать, что invoke возвращает, когда что-то пойдет не так, и когда вы сможете безопасно позвонить еще раз.

9 мин читать·Уровень средний·Пересмотрено 12 окт. 2026 г.
Этот текст на английском языке был создан автоматически на основе французского оригинала и еще не проверялся.
Эта страница была переведена автоматически. Английская версия является авторитетной.
#
Анатомия

1. Объект ошибки

invoke возвращает { data, error } и никогда не выдает исключение. error — это AuraError, поэтому isAuraError(error) истинно. Два подкласса сообщают , кто провалил:

classify.tstypescript
import { FunctionsHttpError, FunctionsRelayError } from '@aurabase/aurabase-js'

const { data, error } = await aura.functions.invoke('checkout', { body })

if (error instanceof FunctionsHttpError) {
  // Ваша функция ответила со статусом ошибки. Отладка вашего кода.
} else if (error instanceof FunctionsRelayError) {
  // Платформа вышла из строя: ответ вашей функции так и не пришел.
} else if (error) {
  // Вызов был отменен или отклонен на клиенте (тайм-аут, инвалид_боди, no_session).
}
ПолеЗначение
error.statusHTTP-статус. 0 означает, что на клиенте произошел сбой (нет ответа).
error.codeСтабильный идентификатор, например NOT_FOUND, QUOTA_EXCEEDED, timeout, invalid_body.
error.messageТекст, возвращенный вашей функцией, или объяснение платформы.
error.contextВ FunctionsHttpError: тело, возвращенное вашей функцией (проанализированный JSON или текст).
error.detailsНеобработанное тело ошибки. Для ошибки платформы он содержит error.request_id.
#
Диагностика

2. Что это за ошибка?

Поведение, наблюдаемое в отношении работающего стека. Строка квоты соответствует сопоставлению ошибок серверной части и не сработала в наших тестах.

Что случилосьСортstatuscodemessage
Функция не существуетFunctionsHttpError404NOT_FOUND«…Функция «нет» невозможна»
Ваша функция возвращает 500 с текстом.FunctionsHttpError500http_500этот текст
Ваша функция возвращает 503 самаFunctionsHttpError503http_503что ты вернул
Ваша функция выдаетFunctionsHttpError500http_500"Внутренняя ошибка сервера"
Ваша функция превышает ее timeout_secsFunctionsHttpError500 или 503http_500 / http_503«Ошибка выполнения функции» или «Функция вернула HTTP 503»
Время выполнения недоступноFunctionsRelayError503SERVICE_UNAVAILABLEобъясняет, что функция была , а не.
Сеть выходит из строя до какого-либо ответаFunctionsRelayError0network_errorошибка сети
Плановая квота исчерпанаFunctionsHttpError403QUOTA_EXCEEDEDсообщение о квоте
Слишком много звонков от одного клиентаFunctionsHttpError429rate_limit_exceededждать сообщение
Тело запроса слишком великоFunctionsRelayError503SERVICE_UNAVAILABLE«Превышен максимальный размер полезной нагрузки»
Вы отменили подписку, или срок действия вашего timeout истек.AuraError0timeout«Вызов функции прерван или истекло время ожидания»
Тело не может быть отправлено в формате JSON.AuraError0invalid_bodyназывает тип, которого следует избегать
Ошибка 503 в вашей функции не является сбоем платформы.

Если ваш собственный код возвращает 502, 503 или 504, вы получаете FunctionsHttpError: класс сообщает вам, кто ответил, а не какой номер статуса.

Две неудачи выглядят как нечто другое

Тело запроса размером более 256 КБ отклоняется с помощью 503 SERVICE_UNAVAILABLE, а ответ размером около 300 КБ или более не возвращается в течение нашего 50-секундного теста. См. ограничения . Повторная попытка не помогает; отправлять меньше данных или использовать хранилище.

#
Повторить попытку

3. Решите, стоит ли повторять попытку

SDK никогда не повторяет вызов за вас: ваша функция может иметь побочные эффекты, а повторный вызов POST по умолчанию небезопасен. Решать вам, используя таблицу ниже.

ОтказФункция запустилась?Безопасно ли повторить попытку?
503 с платформы (FunctionsRelayError)Нет, время выполнения было недоступноДа, с коротким перерывом
429НетДа, после задержки в error.retryAfter
403 QUOTA_EXCEEDEDНетНет, пока квота не будет сброшена или вы не смените план.
status 0 (network_error)НеизвестныйТолько если ваша функция идемпотентна
timeout на клиентеНеизвестныйТолько если ваша функция идемпотентна
FunctionsHttpError 5xxДа, частично или полностьюТолько если ваша функция идемпотентна
FunctionsHttpError 4xxДаНет: исправить запрос
retry.tstypescript
import { FunctionsRelayError } from '@aurabase/aurabase-js'

async function invokeWithRetry(name: string, body: unknown, attempts = 3) {
  for (let i = 0; i < attempts; i++) {
    const res = await aura.functions.invoke(name, { body })
    const safe = res.error instanceof FunctionsRelayError && res.error.status === 503
    if (!res.error || !safe) return res
    await new Promise((r) => setTimeout(r, 2 ** i * 500))
  }
  return aura.functions.invoke(name, { body })
}
Вместо этого сделайте функцию идемпотентной

Платформа не выполняет дедупликацию вызовов и игнорирует Idempotency-Key. Для платежей или электронной почты сохраните переданный вами ключ в body и проверьте его в начале функции.

#
Время

4. Тайм-ауты

Три часа идут одновременно:

ЧасыПо умолчаниюГде это изменить
Ваш клиент30 секунд на каждый responseTypeinvoke(…, { timeout }), { signal } или requestTimeoutMs в параметрах клиента.
Функция30 с, от 1 до 300permissions.timeout_secs в функции
Шлюз380 sне настраивается по проектам

Когда функция превышает timeout_secs, среда выполнения отменяет ее, и ваш вызов завершается неудачей примерно после этой задержки с кодом 500 или 503, показанным выше. Причина отображается в error.context.detail (WorkerRequestCancelled: request has been cancelled by supervisor) в необработанном режиме. Установите клиент timeout немного выше timeout_secs функции, чтобы увидеть эту ошибку вместо клиента timeout.

timeout.tstypescript
const { error } = await aura.functions.invoke('report', { timeout: 35_000 })
if (error?.code === 'timeout') {
  // Отменено вашим клиентом. Возможно, функция все еще работает.
}

Для работы продолжительностью более нескольких секунд ставит задание в очередь вместо того, чтобы удерживать соединение открытым.

#
Отлаживать

5. Найдите причину

  • Ошибки платформы содержат идентификатор запроса: error.details.error.request_id. Укажите его при обращении в службу поддержки.
  • aura functions logs <name> перечисляет последние HTTP-запросы с указанием метода, пути, статуса, продолжительности и идентификатора запроса. , а не, показывает то, что ваша функция написала с помощью console.log или console.error: этот вывод остается в собственных журналах среды выполнения, которые может прочитать только оператор платформы. См. ограничения для этого и других текущих разрывов.
  • Идентификатор вызова не пересылается в вашу функцию. Передайте свой идентификатор в headers и зарегистрируйте его.
Последнее обновление · 12 окт. 2026 г.