Перейти к основному содержимому

pollSaga

@mineflow/client-core


@mineflow/client-core / pollSaga

Function: pollSaga()

function pollSaga(
client: SagaStatusClient,
sagaId: string,
opts?: PollSagaOptions): Promise<{
sagaId: string;
steps: object[];
}>;

Defined in: packages/client-core/src/saga.ts:175

Опрашивает статус async-саги до терминального состояния и возвращает финальный снимок. Бэк выполняет некоторые POST асинхронно (возвращая 202 + sagaId), SSE для саг нет — поэтому статус тянется поллингом.

Поведение:

  • провал (failed/compensated) возвращается немедленно — он окончателен;
  • успех стабилизируется: возвращается только когда число различных шагов не изменилось между двумя опросами (защита от «все текущие шаги completed, но саге ещё предстоят шаги»);
  • по истечении timeoutMs бросает SagaTimeoutError.

Важно: терминал «провал» — это НЕ исключение; pollSaga резолвится снимком с failed/compensated. Различай успех и провал по содержимому status.steps.

Parameters

ParameterTypeDescription
clientSagaStatusClientopenapi-fetch-клиент (или мок) с методом saga-status.
sagaIdstringидентификатор саги из ответа 202.
optsPollSagaOptionsинтервал, таймаут, предикат завершённости, инъекции sleep/now.

Returns

Promise<{ sagaId: string; steps: object[]; }>

финальный SagaStatus (успешный или провальный терминал).

Throws

SagaTimeoutError если сага не завершилась за timeoutMs.

Example

const { sagaId } = unwrap(await client.POST('/api/v1/prd/shift-reports/{id}/approve', { ... }));
const final = await pollSaga(client, sagaId, { intervalMs: 1000, timeoutMs: 60_000 });