執行工作流程節點。成功分支儘管有輸出資料卻未觸發下游;或啟用「Always Output Data」時兩個分支同時觸發

大家好 - 遇到一個頑固的問題,當 Execute Workflow 節點的「On Error: Continue (using error output)」設定開啟時,雙輸出行為出現異常。希望有人遇過這種情況並找到乾淨的解決方案。

設定

  • 一個父工作流透過 Execute Workflow 呼叫子工作流。

  • Execute Workflow 節點設定:

    • Mode:為每個項目執行一次

    • Wait for Sub-Workflow Completion:ON

    • On Error:Continue (using error output)

  • 子工作流的終端節點是 Google Sheets 更新。

  • 父節點有兩個下游分支:成功路徑(清理 + Telegram 警告 + 表單完成頁面)和錯誤路徑(Telegram 錯誤警告 + 錯誤完成頁面)。

我看到的行為

根據父節點 Execute Workflow 的 Always Output Data 設定,我遇到兩種失敗模式:

情況 A - 父節點 Execute Workflow 的 Always Output Data 為 OFF:

  • 子工作流成功時:終端節點(Sheets 更新)發出 1 個包含完整行資料的項目。父節點 Execute Workflow 的 Success Branch 標籤清楚地顯示該項目存在。但連接到成功埠的下游節點沒有執行。執行在 Execute Workflow 處停止,沒有錯誤,也沒有進一步的路由。

  • 子工作流出錯時:錯誤分支正確執行並帶有錯誤承載。乾淨利落。

情況 B - 父節點 Execute Workflow 的 Always Output Data 為 ON:

  • 子工作流成功時:成功和錯誤分支都執行(成功帶有實際資料,但還有某種幽靈執行)。

  • 子工作流出錯時:兩個分支同時執行:成功分支帶有空的預留位符項目 {},錯誤分支帶有實際錯誤承載。兩個下游路徑平行執行,導致重複的 Telegram 警告和衝突的表單完成頁面。

我試過的方法

  1. 在子工作流的終端 Sheets 節點上切換 Always Output Data 為 ON,同時將父節點 Execute Workflow 的 Always Output Data 設為 OFF。子工作流的終端節點在子執行日誌中確認會發出 1 個包含完整資料的項目。父節點 Execute Workflow 的 Success Branch 標籤也顯示該項目。下游節點仍然沒有執行。

  2. 驗證 Wait for Sub-Workflow Completion 為 ON。

  3. 驗證畫布上的連線 - 成功埠連接到清理節點,錯誤埠連接到警告節點。沒有意外的交換。

  4. 嘗試了「為每個項目執行一次」和「以所有項目執行一次」兩種模式。結果相同。

  5. 重新繪製來自成功埠的連接線。沒有改變。

我想要的

大多數人似乎使用的標準雙輸出模式:

  • 子工作流成功 → 只有成功分支在下游執行 → 清理 + 成功警告執行。

  • 子工作流拋出錯誤 → 只有錯誤分支在下游執行 → 錯誤警告 + 恢復 UI 執行。

  • 永遠不會同時兩個都執行。

問題

  1. 當子工作流的終端節點返回項目但父節點 Execute Workflow 埠沒有傳播到下游節點時,Continue (using error output) 是否已知會出現異常?是否存在已修補此問題的特定 n8n Cloud 版本?

  2. 人們是否有某種規範模式來獲得乾淨的雙路由 - 也許使用 Merge 節點、對 $json.error 的 IF 檢查,或其他我遺漏的結構性解決方案?

任何指點都感謝。很樂意分享更多細節(如 JSON 程式碼、工作流螢幕截圖等)。

謝謝。

1個讚

歡迎 @Nick_Vieru 加入我們的社群!我是 Jay,是一位 n8n 驗證創作者。

「Always Output Data」開啟時的雙分支行為是已知的特性 - 請將其關閉。更簡潔的做法是:保持「On Error: Continue (using error output)」不變,然後在 Execute Workflow 節點後立即添加一個 IF 節點,檢查 {{ $json.error !== undefined }}。子工作流程的成功輸出不會帶有錯誤物件;錯誤輸出會有。這樣可以讓你獲得乾淨明確的分支,而不會有幽靈運行的問題。

有一點值得檢查:確保你的子工作流程的終端節點沒有在錯誤到達父級之前不小心吞掉它 - 如果子工作流程有自己的錯誤處理程序,會捕捉並將錯誤轉換為正常輸出,那麼父級的 Execute Workflow 節點就不會將其視為錯誤。

@Nick_Vieru
請分享您的 json。

嘿Jay,非常感謝你的簡短回覆!

我會試試你建議的方法,如果解決了這個問題就告訴你!

1個讚

謝謝 Jay,成功了!我必須在工作流程中做一些調整,該工作流程在我遇到問題的工作流程中執行。基本上,有 2 個節點處於終端位置,由於它們也有條件判斷,而對於我運行的場景,該條件判斷從未觸發,所以它從來沒有到達那些節點。因此,終端節點從未被到達,execute workflow 成功分支也無法觸發,因為它從未收到已執行的工作流程已成功完成的回應。

在有問題的工作流程內部放入 IF 條件判斷,並將 IF 條件判斷節點的一個分支添加到(在被調用/在內部執行的工作流程中)無操作分支,現在可以運行了!

1個讚

很高興它成功了!把 IF 條件句移到子工作流程裡其實是個更清潔的模式——它能將分支邏輯保持自成一體,這樣父層就不需要知道它呼叫的東西的內部結構。

2個讚

已經修復了,謝謝!

很樂意幫忙!如果一切現在都如預期運作,請隨時將相關回覆標記為解決方案,祝你今天過得很愉快!

1個讚

嘿,我是論壇新手。我該怎麼做?

1個讚

哎呀,我搞錯了——我剛才才發現這個話題在「幫助我建立工作流程」類別中,不是在「提問」類別。
「標記為解決方案」功能僅在「提問」類別中提供,所以你在這裡看不到這個選項。
不過還是非常感謝你願意標記解決方案,我真的很感激!但這個類別就是不支援這個功能。