一個節點怎麼可能不執行?

描述問題/錯誤/問題
我有一個節點分岔成兩個平行分支。每個分支都以一個 Data Table「Get」 節點開始,兩個 Get 節點都從共享的父節點獲得完全相同的輸入項目。
其中一個平行 Get 節點運行正常。另一個根本不執行。有趣的是,兩個節點之間的唯一區別是它們指向的表。其他一切都完全相同,相同的輸入、相同的操作、相同的設置。
我已經檢查了顯而易見的事項:

  • 失敗節點指向的表已驗證存在。
  • 該表內的數據已驗證,數據在那裡。
  • 我為該節點添加了條件(篩選器),沒有幫助。
  • 我嘗試在畫布上重新定位節點,沒有幫助。
  • 我懷疑該節點根本沒有足夠的時間運行(某種計時/競爭),所以我仔細檢查了這一點。那不是問題。
  • 我從頭開始重新建立節點,沒有幫助。
  • 我重新連接到表,沒有幫助。
  • 我將表選擇從「從清單中選擇」更改為「按 ID」,也更改為「按名稱」,沒有幫助。

唯一真正讓它運行的事情是將節點移動到鏈的下游,大約晚 10 個節點。然後我嘗試只向下移動 5 個節點,向後移動 1 個節點,它又停止工作了。所以鏈中的位置似乎很重要,我不理解為什麼一個只讀表的節點會這樣。
當下游節點用 $('Get node B').all() 按名稱引用該節點時,這會成為真正的失敗。由於該節點從未執行,引用返回不了任何內容,而同一輸入上的同級 Get 節點運行完美。
為什麼一個平行 Get 節點拒絕執行,而其具有相同輸入的同級節點運行正常,為什麼只有將其移到鏈的下游才能修復它?

錯誤訊息是什麼(如果有的話)?
Get 節點本身沒有錯誤,它根本不運行。然後下游節點失敗,因為引用的節點從未執行。

分享最後一個節點返回的輸出

(Get node A:返回其行。Get node B,相同輸入:沒有執行,沒有輸出。)

關於您的 n8n 設置的信息

  • n8n 版本:2.25.7
  • 資料庫(預設:SQLite):預設 n8n
  • 運行 n8n 的方式(Docker、npm、n8n cloud、桌面應用):n8n cloud
  • 作業系統:n8n cloud

@pohgen 問題不在於節點,而在於 n8n 的分支執行順序。自 v1.0 以來,n8n 按照畫布位置由上至下依次執行平行分支,完全完成一個分支後才執行下一個。

Validate Input 分出三個 Gets。n8n 先執行最上面的分支,然後執行中間的分支(Get Routing Rows)及其所有下游內容,包括執行 $(‘Get Email Aliases’).all() 的節點,只有這樣才會執行下面的分支。所以那個參考在 Get Email Aliases 運行之前就觸發了,返回空值,該節點看起來像是從未執行過。將它向下移動約 10 個節點會把它放在主分支中,在參考之前,所以它先運行,這就是位置效應。

修復方法:不要跨平行分支進行參考。將 Get Email Aliases 內聯到你使用它的上游位置,或者添加一個 Merge 節點以確保所有分支完成後再執行任何下游節點,這是 n8n 文檔推薦的做法。

@pohgen

要正確修復此問題並保持工作流程整潔,您必須明確告訴 n8n 平行分支中的資料是必需的,方法是將它們重新連接在一起。

  1. 在平行分支之後新增一個 Merge 節點
  2. 將您「運作中」分支的輸出(例如 Get All Candidate Templates)連接到 Merge 節點的第一個輸入。
  3. 將您「失敗」分支的輸出(例如 Get Routing Rows)連接到 Merge 節點的第二個輸入。
  4. 將 Merge 節點的模式設定為 「等待所有輸入到達」(或如果您要合併資料,則為「合併」)。
  5. 將您的下游節點放在此 Merge 節點之後

這樣做,您就建立了一個實體連接,可以「保護」該分支免於被刪除,確保引擎將其識別為執行的必要部分。

這有幫助嗎?