On 19/02/2019 11:41, Adi Roiban wrote:

I think it was introduced to catch some common bad usage patterns ...
like yours :)

Not a massively helpful comment.

If you want to chain the deferreds, use the dedicated helper
https://twistedmatrix.com/documents/current/core/howto/defer.html#chaining-deferreds

Deferred are not always 100% resolved/called.
You might have a deferred called, but the current result might be
another deferred... so it has no final result yet.

----

so in your case, instead of `returnValue(result)` use

result = yield result
returnValue(result)


in this way, the result is resolved :)

The methods being hooked don't necessarily return deferreds.
I'd like it to be an explicit choice of the caller, ie:

result = yield SomeProtocol.onMessage.called()
# okay, we got here, we know onMessage was called,
# now we might want to tick a clock, or otherwise simulate
# async state manipulation.
# now I want to make sure the deferred chain on the onMessage result has been completed:
yield result

cheers,

Chris

_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to