mirror of
https://github.com/vercel/workflow.git
synced 2026-09-14 19:59:43 +08:00
42 lines
938 B
TypeScript
42 lines
938 B
TypeScript
import { FatalError, getStepMetadata, RetryableError } from '@workflow/core';
|
|
|
|
export async function retryableAndFatalErrorWorkflow() {
|
|
'use workflow';
|
|
|
|
const retryableResult = await stepThatThrowsRetryableError();
|
|
|
|
let gotFatalError = false;
|
|
try {
|
|
await stepThatFails();
|
|
} catch (error: any) {
|
|
if (FatalError.is(error)) {
|
|
gotFatalError = true;
|
|
}
|
|
}
|
|
|
|
return { retryableResult, gotFatalError };
|
|
}
|
|
|
|
async function stepThatThrowsRetryableError() {
|
|
'use step';
|
|
const { attempt, stepStartedAt } = getStepMetadata();
|
|
console.log(
|
|
`💁 Attempt ${attempt} started at ${stepStartedAt.toISOString()}`
|
|
);
|
|
if (attempt === 1) {
|
|
throw new RetryableError('Retryable error', {
|
|
retryAfter: '2s',
|
|
});
|
|
}
|
|
return {
|
|
attempt,
|
|
stepStartedAt,
|
|
duration: Date.now() - stepStartedAt.getTime(),
|
|
};
|
|
}
|
|
|
|
async function stepThatFails() {
|
|
'use step';
|
|
throw new FatalError('step failed');
|
|
}
|