Come fisso due callback separati a un intrecciato differito, quindi entrambi il fuoco dopo il risultato è pronto?

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

  •  21-12-2019
  •  | 
  •  

Domanda

Non sono molto esperto con contorto, ma qui è quello che capisco finora.
Quando faccio una query del database come:

db = database.veryLongQuery(sql, binds)
.

Posso aggiungere callback per fare qualcosa con il risultato,

db.addCallback(lambda res: dispalyResult(res))
.

Altrimenti se ho bisogno di fare più cose allo stesso risultato, potrei fare un metodo:

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
.

e collegalo a db (come primo callback)

db.addCallback(self.doTwoThings)
.

Tuttavia, vorrei avere un riferimento a d1 e d2 direttamente dall'inizio, contemporaneamente in cui viene creato DB, poiché gli altri eventi avvieranno e ho bisogno di aggiungere callback a d1 e d2. .

Come faccio a fissare due (o più) catene di callback separate sullo stesso differite, db, in modo che "divide", ed entrambi sono sparati fianco a fianco una volta che il risultato è pronto?

In questo modo posso tenere traccia di ciascuna differita dall'inizio e accederle se necessario.

O, è lì per creare d1 e d2 dall'inizio, quindi ho accesso a tali nomi?

È stato utile?

Soluzione

Puoi usare qualcosa del genere:

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)
.

Quindi, ogni volta che D1 ottiene il risultato, lo passerà anche a D2.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top