2016-01-14 37 views
2

後所以,我有一個回調鏈中,這樣的事情:Python的扭曲 - 返回回調鏈errback可

deferred = create_deferred() 
deferred.addCallback(cb1) 
deferred.addCallback(cb2) 
deferred.addCallback(cb3) 
deferred.addCallback(cb4) 

deferred.addErrback(start) 
deferred.addErrback(eb1) 

deferred.addBoth(end) 

在輸入start()方法開始 - 這也是一個errback可。首先,創建延期。它有4個處理步驟,從cb1到cb4。如果一切順利,輸入應該經過4個處理步驟,最後在addBoth結束()。

如果沿途出現問題(在cb1或cb2等),他們應該去start()輸入將被「重試」幾次。如果沒有更多的重試,或者start()中發生了錯誤,它應該轉到eb1而不是end()。

我的問題是,即使對於某個輸入有重試,它仍然會到達eb1並且比結束還要多。

如何在遇到錯誤的情況下使延遲返回到回調鏈?

enter image description here

現在,如果,例如,我在CB2錯誤,推遲去啓動,但即使它仍然有重試,但還是到EB1。我怎樣才能解決這個問題?

謝謝!

+0

這聽起來像一個有趣的問題,但是http://sscce.org對於真正理解問題的具體情況以確保提出的解決方案能夠起作用會非常有用。 – Glyph

回答

0

總之,如果EB1在START之後被調用,那麼START必須返回某種失敗值。這就是Twisted如何知道是否要去掉回調鏈或errback鏈。