[Twisted-Python] Twisted vs jQuery Deferreds (was Re: RPC design questions)

Tobias Oberstein tobias.oberstein at tavendo.de
Wed Aug 24 18:22:32 EDT 2011

I follow Glyphs advice and only keep the lambda version with standard Twisted Deferred.

However, I've got a (I believe) more serious "design" problem.

The RPC stuff works in Twisted, but also from JavaScript.

So I have 2 audiences (Twisted and JS developers).

On JS, I use the Deferreds that come standard with jQuery since 1.5.

Now compare the following Twisted code (self.call does the RPC and returns a Twisted Deferred):

      # prints 23
     d2 = self.call("square", 23).addCallback(lambda res: \
                        self.call("sqrt", res)).addCallback(self.show)

     # prints 23
     d3 = self.call("square", 23).addCallback(lambda res: \
                        self.call("sqrt", res).addCallback(self.show))

(note the subtle difference in bracketing)

with the following JS

            // prints 529
           sess.call("square", 23).then(function(res) {
                                            return sess.call("sqrt", res);

           // prints 23
           sess.call("square", 23).then(function(res) {
                                            sess.call("sqrt", res).then(console.log);


The JS is structurally/syntactically similar to the Py version.

However they behave differently.

There seems to be a fundamental difference between Twisted and jQuery Deferreds.

When calling then() on a jQuery Deferred D, it seems to return D, not any Deferred that might
be returned within the handler within then().

Whereas the Twisted Deferred addCallback() returns the inner Deferred.

Am I getting something wrong?

I'd be glad on any hints/clarification whats going on here ..



The complete examples are on:


Py Client:

Py Server:

=> python setup.py install

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://twistedmatrix.com/pipermail/twisted-python/attachments/20110824/e0e78d92/attachment.htm 

More information about the Twisted-Python mailing list