2つの別々のコールバックをツイスト遅延に取り付けるには、その結果、結果の後に両方の火災ができますか。
-
21-12-2019 - |
質問
私はねじれにあまり経験していませんが、ここに私がこれまで理解しているものです。
次のようなデータベースクエリを実行すると、
db = database.veryLongQuery(sql, binds)
.
結果を持つ何かをするためのコールバックを追加することができます
db.addCallback(lambda res: dispalyResult(res))
.
それ以外の場合、同じ結果に複数のものをする必要がある場合は、メソッドを作成できます。
def doTwoThings(self, res):
self.d1 = anotherDeferred(res) # write to table A, return lastRowId
self.d2 = yetAnotherDeferred(res) # write to table B, return lastRowId
return d1
.
を添付して、(最初のコールバックとして)
に添付するdb.addCallback(self.doTwoThings)
.
しかし、DBが作成されたときと同時に、db
とd1
を参照して、他のイベントが発生し、d2
とd1
にコールバックを追加する必要があります。
同じ遅延、d2
に2つのコールバックチェーンを添付することについてどのようにして、結果が準備ができていると、両方が並んで発生しますか?
このようにして、開始から遅延を追跡して必要に応じてそれらにアクセスすることができます。
または開始からdb
とd1
を作成する方法はありますので、それらの名前にアクセスできますか?
解決
あなたはこのようなものを使うことができます:
def splitResults(d1, d2):
def splitter(val):
# Pass val to d2 chain
d2.callback(val)
# Return val into d1's chain
return val
def splitterError(err):
d2.errback(err)
d1.addCallbacks(splitter, splitterError)
.
だから、D1が結果を得たときはそれをD2にも渡します。
所属していません StackOverflow