所以,我有一个回调链,就像这样:
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个处理步骤,最后是end() - 来自addBoth。
如果一路上出现问题(在cb1或cb2等中),他们应该转到start(),其中输入将被重试"几次。如果没有更多的重试或者start()中发生了错误,它应该转到eb1而不是end()。
我的问题是,即使某个输入有重试,它仍会转到eb1而不是最终。
如果遇到错误,如何将延迟返回到回调链?
现在,例如,如果我在CB2中有错误,则延迟转到START,但即使它仍然有重试,它仍然会转到EB1。我该如何解决这个问题?
谢谢!
答案 0 :(得分:0)
简而言之,如果在START之后调用EB1,那么START必须返回某种失败值。这就是Twisted如何知道是沿着回调链还是错误回归链。