Oli*_*eng 2 python twisted deferred-execution
d = Deferred()
d.callback(Deferred()) # Assertion error saying that a Deferred shouldn't be passed
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我查看了代码并提交了messages/Trac,并且没有理由说明为什么会出现这种情况.绕过这个最明显的方法就是把它Deferred放在一个元组中,但为什么这个限制在这里呢?
这有两个相关的原因.
首先,它有助于尽早发现可能出现的错误 - 在错误发生的地方附近.使用结果调用Deferred,然后将结果传递给其所有回调.如果你将结果本身设为Deferred,那么这些回调在被调用时可以做的并不多.这引出了我的下一个原因.
其次,Deferreds支持是链接,它处理一个传递延迟的最常见用例.给定两个延迟,a和b,链接导致a暂停处理其自己的回调链,直到b有结果,然后恢复其回调链,结果为b.当Deferred上的回调返回Deferred时会发生这种情况.它也可以明确地用Deferred.chainDeferred.
| 归档时间: |
|
| 查看次数: |
303 次 |
| 最近记录: |