跳到主要内容

Run.startAsync()

.startAsync() 方法会启动 workflow run,但不等待其完成。它会立即返回 runId,让 workflow 在后台执行。这适用于长时间运行的 workflow 或计划任务,也能避免因等待 workflow 完成而阻塞。

使用示例
使用示例的直接链接

const run = await workflow.createRun()

// Fire-and-forget - returns immediately
const { runId } = await run.startAsync({
inputData: {
value: 'initial data',
},
})

// Optionally poll for completion later
const result = await workflow.getWorkflowRunExecutionResult(runId)

参数
参数的直接链接

inputData?:

z.infer<TInput>
与 workflow 输入 schema 匹配的输入数据

requestContext?:

RequestContext
workflow 执行期间使用的 Request Context 数据

initialState?:

z.infer<TState>
workflow 执行使用的初始状态

tracingOptions?:

TracingOptions
Tracing 配置选项。

metadata?:

Record<string, any>
要添加到根 trace span 的 metadata。可用于添加用户 ID、会话 ID 或 feature flag 等自定义属性。

traceId?:

string
此次执行使用的 trace ID(1-32 个十六进制字符)。提供后,此 trace 将归入指定的 trace。

outputOptions?:

OutputOptions
输出配置选项。

includeState?:

boolean
是否在结果中包含 workflow run 状态。

返回值
返回值的直接链接

runId:

string
此 workflow run 的唯一标识符。可用它稍后检查状态或获取结果。

何时使用 startAsync()
when-to-use-startasync的直接链接

在以下情况中,请使用 startAsync() 而不是 start()

  • 长时间运行的 workflow:workflow 可能需要数分钟或数小时才能完成
  • 计划任务/cron 触发器:希望触发 workflow,而不阻塞调度器
  • 避免轮询失败:对于 Inngest workflow,start() 会轮询完成状态,这可能失败并引发重试。startAsync() 可避免此问题
  • 后台处理:希望将工作加入队列并异步处理结果

检查 workflow 状态
检查 workflow 状态的直接链接

调用 startAsync() 后,可以通过以下方式检查 workflow 状态:

// Get the execution result (including step outputs)
const result = await workflow.getWorkflowRunExecutionResult(runId)

if (result?.status === 'success') {
console.log('Workflow completed:', result.steps)
} else if (result?.status === 'failed') {
console.log('Workflow failed:', result.error)
} else if (result?.status === 'running') {
console.log('Workflow still running...')
}