You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Randy Abernethy (JIRA)" <ji...@apache.org> on 2014/03/05 07:53:44 UTC

[jira] [Commented] (THRIFT-2376) nodejs: allow Promise style calls for client and server

    [ https://issues.apache.org/jira/browse/THRIFT-2376?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13920588#comment-13920588 ] 

Randy Abernethy commented on THRIFT-2376:
-----------------------------------------

Hey Pierre,

I like the promise addition. That said I think Thrift Node.JS dependencies should all be in the same place. Rather than having the compiler emit the require('q') for every compiled interface it seems like it would be more appropriate in the index.js along with the require('node-int64') dependency.

Thoughts?

--Randy

> nodejs: allow Promise style calls for client and server
> -------------------------------------------------------
>
>                 Key: THRIFT-2376
>                 URL: https://issues.apache.org/jira/browse/THRIFT-2376
>             Project: Thrift
>          Issue Type: Improvement
>          Components: Node.js - Compiler
>    Affects Versions: 0.9.2
>            Reporter: Pierre Lamot
>            Assignee: Henrique Mendonça
>             Fix For: 0.9.2
>
>         Attachments: 0001-THRIFT-2376-nodejs-allow-Promise-style-calls-for-cli.patch
>
>
> the idea of this patch is to allow writing server functions and clients calls using future/promise style.
> for instance a server function:
> {code:javascript}
> {
>   divide: function(n1, n2, result) {
>     if (n2 === 0) {
>       var x = new ttypes.InvalidOperation();
>       result(x);
>       return;
>     }
>     result(null, n1/n2);
>   }
> }
> {code}
> might be written as:
> {code:javascript}
> {
>   divide: function(n1, n2) {
>     if (n2 === 0) {
>       throw new ttypes.InvalidOperation();
>     }
>     return n1/n2;
>   }
> }
> {code}
> both style remains valid, the style to use is detected according to the function signature (is there a last argument for the callback). 
> when using promise style, a promise can also be return in stead of the result for asynchronous results.
> the client side might use promise as well:
> {code:javascript}
> client.calculate(1, work, function(err, message) {
>   if (err) {
>     console.log("InvalidOperation " + err);
>   } else {
>     console.log('Whoa? You know how to divide by zero?');
>   }
> });
> {code}
> might be written as:
> {code:javascript}
> client.calculate(1, work)
>   .then(function(message) {
>         console.log('Whoa? You know how to divide by zero?');
>   })
>   .fail(function(err) {
>     console.log("InvalidOperation " + err);
>   });
> {code}



--
This message was sent by Atlassian JIRA
(v6.2#6252)