Aller au contenu principal

Run.cancel()

La méthode .cancel() annule une exécution de Workflow, arrête l’exécution et libère les ressources.

Cette méthode interrompt toutes les étapes en cours et met à jour l’état du Workflow sur 'canceled'. Elle fonctionne aussi bien pour les Workflows actifs que pour les Workflows suspendus ou en attente.

Exemple d’utilisation
Lien direct vers Exemple d’utilisation

const run = await workflow.createRun()

await run.cancel()
// Returns: { message: 'Workflow run canceled' }

Paramètres
Lien direct vers Paramètres

Aucun paramètre:

void
Cette méthode n’accepte aucun paramètre

Valeur renvoyée
Lien direct vers Valeur renvoyée

result:

Promise<{ message: string }>
Promise qui se résout avec { message: 'Workflow run canceled' } lorsque l’annulation réussit

Fonctionnement de l’annulation
Lien direct vers Fonctionnement de l’annulation

Lorsqu’il est appelé, le Workflow :

  1. Déclenche le signal d’interruption : utilise l’API Web standard AbortSignal pour notifier les étapes en cours
  2. Empêche les étapes suivantes : aucune étape supplémentaire n’est exécutée

Comportement du signal d’interruption
Lien direct vers Comportement du signal d’interruption

Les étapes qui vérifient le paramètre abortSignal peuvent réagir à l’annulation :

  • Les étapes peuvent écouter l’événement 'abort' : abortSignal.addEventListener('abort', callback)
  • Les étapes peuvent vérifier si elles ont déjà été interrompues : if (abortSignal.aborted) { ... }
  • Utile pour annuler les délais d’expiration, les requêtes réseau ou les opérations longues

Les étapes doivent vérifier activement le signal d’interruption pour être annulées en cours d’exécution ; dans le cas contraire, l’étape actuelle s’exécute jusqu’à son terme et les étapes suivantes ne s’exécutent pas.

Exemples d’utilisation avancés
Lien direct vers Exemples d’utilisation avancés

Annuler un Workflow en cas d’erreur
Lien direct vers Annuler un Workflow en cas d’erreur

const run = await workflow.createRun()

try {
const result = await run.start({ inputData: { value: 'initial data' } })
} catch (error) {
await run.cancel()
}

Créer une étape qui réagit à l’annulation
Lien direct vers Créer une étape qui réagit à l’annulation

const step = createStep({
id: 'long-running-step',
execute: async ({ inputData, abortSignal, abort }) => {
const timeout = new Promise(resolve => {
const timer = setTimeout(() => resolve('done'), 10000)

// Clean up if canceled
abortSignal.addEventListener('abort', () => {
clearTimeout(timer)
resolve('canceled')
})
})

const result = await timeout

// Check if aborted after async operation
if (abortSignal.aborted) {
return abort() // Stop execution
}

return { result }
},
})