Skip to content
Meeko
Type to search the guides and the API reference. Open it from any page with / or Ctrl K; move with the arrow keys and open a result with Enter.
Get started

Contents

On this page

Not translated yet

This page has not been translated into English yet, so it is shown in Spanish.

RetrySafeMutation

interfaz Since 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";

Source code 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
}

Type parameters #

Input

Entrada de la mutación.

Output

Salida de la mutación.

Example #

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.

See also #

Was this page helpful?

Add a comment

It is sent when you choose “Yes” or “No”. Only the page, your answer and the comment are stored: no cookies and no personal data.

0 of 2000 characters

Edit on GitHub: packages/meeko/src/app/runtime/mutations.ts