Logotipo de Aurabase
aurabasedocumentos
documentos›Edge Functions›Errors, timeouts and retries

Errores, tiempos de espera y reintentos

Cómo leer lo que devuelve invoke cuando algo sale mal y cuándo puedes volver a llamar de forma segura.

9 min leer·Nivel intermedio·Revisado el 12 oct 2026
Este texto en inglés se generó automáticamente a partir del original en francés y aún no ha sido revisado.
Esta página fue traducida automáticamente. La versión en inglés es autorizada.
#
Anatomía

1. El objeto del error

invoke devuelve { data, error } y nunca arroja. error es un AuraError, por lo que isAuraError(error) es verdadero. Dos subclases te dicen quién falló:

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

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

if (error instanceof FunctionsHttpError) {
  // Tu función respondió, con un estado de error. Depura tu código.
} else if (error instanceof FunctionsRelayError) {
  // La plataforma falló: la respuesta de tu función nunca volvió.
} else if (error) {
  // La llamada fue cancelada o rechazada en el cliente (tiempo de espera, cuerpo_inválido, no_sesión).
}
campoSignificado
error.statusEstado HTTP. 0 significa que el error ocurrió en el cliente (sin respuesta).
error.codeIdentificador estable, por ejemplo NOT_FOUND, QUOTA_EXCEEDED, timeout, invalid_body.
error.messageEl texto que devolvió su función o la explicación de la plataforma.
error.contextEn un FunctionsHttpError: el cuerpo que devolvió su función (JSON o texto analizado).
error.detailsEl cuerpo del error sin formato. Para un error de plataforma, contiene error.request_id.
#
Diagnóstico

2. ¿Qué error es?

Comportamientos observados frente a una pila en ejecución. La fila de cuota sigue la asignación de errores del backend y no se activó en nuestras pruebas.

que pasoclasestatuscodemessage
La función no existeFunctionsHttpError404NOT_FOUND"...Función 'no' introducible"
Tu función devuelve 500 con textoFunctionsHttpError500http_500ese texto
Su función devuelve 503FunctionsHttpError503http_503lo que devolviste
Tu función arrojaFunctionsHttpError500http_500"Error interno del servidor"
Tu función excede su timeout_secsFunctionsHttpError500 o 503http_500 / http_503"Error en la ejecución de la función" o "La función devolvió HTTP 503"
El tiempo de ejecución es inalcanzableFunctionsRelayError503SERVICE_UNAVAILABLEexplica que la función era no ejecutada
La red falla ante cualquier respuesta.FunctionsRelayError0network_errorel error de red
Cuota del plan agotadaFunctionsHttpError403QUOTA_EXCEEDEDel mensaje de cuota
Demasiadas llamadas de un clienteFunctionsHttpError429rate_limit_exceededespera mensaje
El cuerpo de la solicitud es demasiado grandeFunctionsRelayError503SERVICE_UNAVAILABLE"Se superó el tamaño máximo de carga útil"
Cancelaste o tu timeout transcurrióAuraError0timeout"La invocación de función se canceló o se agotó el tiempo de espera"
El cuerpo no se puede enviar como JSONAuraError0invalid_bodynombra el tipo a evitar
Un 503 de su función no es una falla de plataforma

Si su propio código devuelve 502, 503 o 504, obtiene un FunctionsHttpError: la clase le dice quién respondió, no cuál es el número de estado.

Dos fracasos parecen otra cosa

Un cuerpo de solicitud superior a aproximadamente 256 KiB se rechaza con 503 SERVICE_UNAVAILABLE y una respuesta de aproximadamente 300 KB o más no regresó dentro de nuestra prueba de 50 segundos. Consulte los límites de . Volver a intentarlo no ayuda; enviar menos datos o utilizar almacenamiento.

#
Reintentar

3. Decide si volver a intentarlo

El SDK nunca vuelve a intentar una invocación por usted: su función puede tener efectos secundarios y un POST repetido no es seguro de forma predeterminada. Tú decides, utilizando la siguiente tabla.

fracaso¿Se ejecutó la función?¿Es seguro volver a intentarlo?
503 desde la plataforma (FunctionsRelayError)No, el tiempo de ejecución era inalcanzableSí, con un breve retroceso.
429NoSí, después del retraso en error.retryAfter
403 QUOTA_EXCEEDEDNoNo, hasta que se restablezca la cuota o cambies de plan
status 0 (network_error)DesconocidoSólo si tu función es idempotente
timeout en el clienteDesconocidoSólo si tu función es idempotente
FunctionsHttpError 5xxSí, parcial o totalmenteSólo si tu función es idempotente
FunctionsHttpError 4xxsiNo: arreglar la solicitud
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 })
}
En su lugar, haga que la función sea idempotente

La plataforma no deduplica llamadas e ignora Idempotency-Key. Para pagos o correo electrónico, almacene una clave que pase en body y verifíquela al inicio de la función.

#
tiempo

4. Tiempos de espera

Tres relojes funcionan a la vez:

RelojPredeterminadodonde cambiarlo
tu cliente30 s por cada responseTypeinvoke(…, { timeout }), { signal } o requestTimeoutMs en las opciones del cliente
la funcion30 s, entre 1 y 300permissions.timeout_secs en la función
la puerta de entrada380 sno configurable por proyectos

Cuando la función excede timeout_secs, el tiempo de ejecución la cancela y su llamada falla después de ese retraso, con el 500 o 503 que se muestra arriba. La causa aparece en error.context.detail (WorkerRequestCancelled: request has been cancelled by supervisor) en modo sin formato. Configure su cliente timeout ligeramente por encima del timeout_secs de la función para ver este error en lugar de un cliente timeout.

timeout.tstypescript
const { error } = await aura.functions.invoke('report', { timeout: 35_000 })
if (error?.code === 'timeout') {
  // Cancelado por su cliente. Es posible que la función aún esté ejecutándose.
}

Para trabajos de más de unos pocos segundos, ponga en cola un trabajo en lugar de mantener abierta una conexión.

#
Depurar

5. Encuentra la causa

  • Los errores de plataforma llevan una identificación de solicitud: error.details.error.request_id. Cítelo cuando se comunique con el soporte.
  • aura functions logs <name> enumera las solicitudes HTTP recientes con método, ruta, estado, duración e identificación de la solicitud. no muestra lo que su función escribió con console.log o console.error: esa salida permanece en los propios registros del tiempo de ejecución, que solo el operador de la plataforma puede leer. Consulte los límites de para conocer esta y otras brechas actuales.
  • El identificador de la llamada no se reenvía a su función. Pase su propia identificación en headers y regístrela.
Última actualización · 12 oct 2026