Pular para o conteúdo principal

Política de erros do Endpoint

Endpoint.errorPolicy controla o comportamento do cache quando um fetch é rejeitado. Ele usa o erro da rejeição para determinar se deve ser tratado como um erro 'soft' (leve) ou 'hard' (grave).

Soft​

Erros soft continuam exibindo dados válidos, se existirem. No entanto, se não houver dados anteriores na store, a promise será rejeitada com error. Nesse caso, useSuspense() lança o erro para ser capturado pelo ErrorBoundary ou AsyncBoundary mais próximo

Hard​

Erros hard sempre rejeitam com error - mesmo quando dados já haviam sido disponibilizados anteriormente.

'hard' | undefined podem ser usados para indicar este estado.

Um erro soft continua exibindo os últimos dados. Erros hard (e erros soft sem nada para exibir) não são capturados, então a pré-visualização os mostra com Reset preview para recomeçar.

Fixtures
GET /api/currentTime/:id
▶api/lastUpdated
▶TimePage
import { useSuspense } from '@data-client/react';
import { lastUpdated } from './api/lastUpdated';

export default function TimePage({ id }) {
  const { updatedAt } = useSuspense(lastUpdated, { id });
  return (
    <div>
      API time:{' '}
      <time>
        {updatedAt.toLocaleString('en-US', { timeStyle: 'long' })}
      </time>
    </div>
  );
}
▶ShowTime
Resultado
Store▶

Política para RestEndpoint​

Como erros 500 indicam uma falha do servidor, queremos usar dados desatualizados caso existam. Por outro lado, algo como um 4xx indica 'erro do usuário', o que significa que o erro indica algo sobre o fluxo da aplicação - por exemplo, quando um registro é excluído, resultando em 404. Manter o registro seria impreciso.

Como este é o comportamento típico de APIs REST, ele é a política padrão em @data-client/rest

errorPolicy(error) {
return error.status >= 500 ? 'soft' : undefined;
}

undefined é outra forma de especificar um erro hard