You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Henrique Mendonça (JIRA)" <ji...@apache.org> on 2014/02/23 20:21:24 UTC

[jira] [Closed] (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:all-tabpanel ]

Henrique Mendonça closed THRIFT-2376.
-------------------------------------


> 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.1.5#6160)