2つの別々のコールバックをツイスト遅延に取り付けるには、その結果、結果の後に両方の火災ができますか。

StackOverflow https://stackoverflow.com//questions/24051762

  •  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が作成されたときと同時に、dbd1を参照して、他のイベントが発生し、d2d1にコールバックを追加する必要があります。

同じ遅延、d2に2つのコールバックチェーンを添付することについてどのようにして、結果が準備ができていると、両方が並んで発生しますか?

このようにして、開始から遅延を追跡して必要に応じてそれらにアクセスすることができます。

または開始からdbd1を作成する方法はありますので、それらの名前にアクセスできますか?

役に立ちましたか?

解決

あなたはこのようなものを使うことができます:

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にも渡します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top