Saltar al contenido
Meeko
Escribe para buscar en las guías y en la referencia de la API. Ábrela desde cualquier página con / o Ctrl K; muévete con las flechas y entra con Intro.
Empezar

Contenidos

En esta página

RetrySafeMutation

interfaz Desde 1.2.0

Lo que añade retrySafe a una mutación. mutate(input) guarda la intención antes de enviarla con una clave de idempotencia nueva y rechaza con un error MUTATION_UNCERTAIN mientras haya otra intención incierta con la misma clave de almacenamiento: resuélvala antes con retry() o discard().

  • Sin respuesta (fallo de red, 5xx, 408 o 429): la intención se conserva, uncertain la muestra y mutate rechaza con el error. Se reintenta con la misma clave al volver la conexión (evento online), al montarse un componente que la usa (también tras recargar) o con retry(). Cada reintento vuelve a poner error en null mientras está en curso.
  • Con respuesta: un 2xx la borra y resuelve con la salida; otro 4xx la borra y rechaza con su ClientError, que también queda en error. uncertain vuelve a null en la misma actualización que data o error.
  • onSuccess y onError avisan también de los reintentos automáticos.
  • Nunca se envía en SSR ni en una pasada en seco.
ts
import type { RetrySafeMutation } from "@meekojs/meeko/framework";

Código fuente src/app/runtime/mutations.ts:190

Declaración #

ts
interface RetrySafeMutation<Input, Output> {
	readonly uncertain: ReadonlySignal<UncertainMutation<Input> | null>
	retry(): Promise<Output | undefined>
	discard(): void
}

Parámetros de tipo #

Input

Entrada de la mutación.

Output

Salida de la mutación.

Ejemplo #

meeko
<script lang="ts">
const charge = useRpcMutation("sales.checkout", { retrySafe: { key: "pos:sale" } });
function discard(): void {
  if (window.confirm("Descártala sólo si comprobaste que no se registró.")) charge.discard();
}
</script>
<template>
  <div role="alert" if:when="charge.uncertain.value">
    <p>Venta en verificación: se reintentará con la misma clave, sin cobrar dos veces.</p>
    <button bind:disabled="charge.pending.value" on:click="() => charge.retry().catch(() => {})">Reintentar</button>
    <button on:click="discard">Descartar</button>
  </div>
</template>

Miembros #

uncertain #

propiedad sólo lectura

readonly uncertain: ReadonlySignal<UncertainMutation<Input> | null>

La intención enviada sin respuesta, o null. Mientras se reintenta conserva su valor.

retry #

método

retry(): Promise<Output | undefined>

Reenvía la intención incierta con la misma clave de idempotencia. Resuelve con la salida, con undefined si no hay ninguna, o rechaza con el error del intento.

discard #

método

discard(): void

Olvida la intención incierta sin reenviarla y vacía error; pida antes confirmación al usuario.

Véase también #

¿Te sirvió esta página?

Añadir un comentario

Se envía al elegir «Sí» o «No». Solo se guardan la página, tu respuesta y el comentario: ni cookies ni datos tuyos.

0 de 2000 caracteres

Editar en GitHub: packages/meeko/src/app/runtime/mutations.ts