在阅读了文档和一些用例之后。问题出现了如何使用回调链。更准确地说,如何在回调之间传输数据
这是代码:
d = defer.Deferred()
d.addCallback(self.min_active_stack)
d.addCallback(self.min_normalization)
d.addCallback(self.insert_db)
d.callback(0)
def min_active_stack(self,d):
...
return self.dbconn.runQuery(sql_query)
def min_normalization(self,min):
...
return min[0][0]+self.x
def insert_db(self,min_norm):
...
return self.dbconn.runQuery(sql_query)
首先,在 min_active_stack 中,我确实向 db 请求。在 min_normalization 我处理数据。并且 insert_db 对处理过的数据我确实有一个对 db 的请求。
在这种情况下,数据通过链传输,很简单。但是如果在链的中间需要运行比回调更多的东西怎么办。
d = defer.Deferred()
d.addCallback(self.min_active_stack)
d.addCallback(self.stack_shift)
d.addCallback(self.min_normalization)
d.addCallback(self.insert_db)
d.callback(0)
def stack_shift(self, d):
return self.dbconn.runQuery(query)
在 stack_shift 中不使用任何外部数据,但它应该在 min_active_stack 之后和 insert_db 之前运行。事实证明,min_normalization 来自 deferred stack_shift 而不是 min_active_stack。
对于我自己,我通过在 stack_shiftt 中添加一行来解决这个问题:
self.temp=d
并在 min_normalization 中使用 self.temp。
但就正确的决定而言?