2
閱讀文檔和一些使用案例後。這個問題引發瞭如何使用回調鏈。更確切地說如何回調扭曲的延期回調鏈
這之間傳輸數據是代碼:
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我請求分貝。在min_normalization中,我處理數據。和insert_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來自延遲stack_shift而不是min_active_stack。
至於我自己,我在stack_shiftt添加一行解決了這個問題:在min_normalization
self.temp=d
而且使用self.temp。
但是,只要正確的決定?
你爲什麼不能在stack_shift添加collback?如果需要的話,你也可以在addCallback中傳遞參數 – varela