跳至主要內容

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 的中繼資料。適合新增使用者 ID、工作階段 ID 或功能旗標等自訂屬性。

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...')
}