If your EntityStore interface uses standard callbacks:

  EntityStore.prototype = {
    get: function(id, cb) { ... },
    save: function(entity, cb) { ... }
  };

Streamline will let you use it "as is". You will be able to write your 
wearEquipement function as:

  function wearEquipment(characterId, equipmentId, _) {
    // code in synchronised style
    // for example:
    var users = new EntityStore('users');
    var user = users.get(userId, _);
  });

>From another streamline function you will call it as:

  var result = wearEquipment(characterId, equipementId, _);

And people who don't use streamline will also be able to call it, just like 
any other node.js async function (because the transformed function IS a 
standard node.js async function!):

  wearEquipment(characterId, equipmentId, function(err, result) {
    // usual node.js code here
  });

You do not have to introduce dual APIs with Async variants. You do not need 
any eval(Wind.compile('async', function(...) {...})) wrapper in every async 
function that you define, ... You get direct interoperability between 
streamlined code and regular node.js code.

Bruno

On Thursday, August 23, 2012 5:31:15 PM UTC+2, Tony Huang wrote:
>
> I'm transforming my game server into Wind.js style. And it's really 
> painless and smooth.
>
> Wind.js has already provided the Wind.Async.Bindings.fromStandard and 
> Wind.Async.Bindings.fromCallback stubs to help you integrate existing codes.
>
> For instance, I already have a EntityStore class which provides standard 
> style interface:
> EntityStore.prototype = {
>   'get': function(cb) {
>     //...
>   },
>   'save': function(entity,cb) {
>     //...
>    }
> };
> In order to make it usable in Wind.js, I just added following codes at the 
> end of the module:
> ['get', 'save'].forEach(function(method) {
>   EntityStore.prototype[method + 'Async'] = 
> Wind.Async.Binding.fromStandard(EntityStore.prototype[method]);
> });
>
> As a result, I can access these methods in Wind.js easily in this way:
>
> var users = new EntityStore('user');
> var currentUser = $await(users.get(userId));
>
> It's quite easy.
>
> But in the other hand, Wind.js hasn't provide the reverse operation, so I 
> added 2 method to the library:
> - Wind.Async.Binding.toStandard
> - Wind.Async.Binding.toCallback
>
> So I can replace my code method by method without any overhead:
> My original code might be:
> function wearEquipment(characterId, equipmentId, cb) {
>   //..... deep levels of callbacks
> }
> After refactoring, my code comes to:
> var wearEquipmentAsync = eval(Wind.compile('async', function(characterId, 
> equipmentId) {
>   // code in synchronised style
> });
> var wearEquipment = Wind.Async.Binding.toStandard(wearEquipmentAsync);
>
> Completely the same interface, the same function, but better-looking code.
>
> On Thu, Aug 23, 2012 at 12:55 AM, Bruno Jouhier 
> <[email protected]<javascript:>
> > wrote:
>
>> On Wednesday, August 22, 2012 12:55:41 PM UTC+2, Dominic wrote:
>>>
>>> this is all very clever, but do code transformations really make 
>>> callbacks easier?
>>>
>>
>> Take the streamline tutorial (doc: 
>> https://github.com/Sage/streamlinejs/blob/master/tutorial/tutorial.mdsource: 
>> https://github.com/Sage/streamlinejs/blob/master/tutorial/tuto7-parallel._js)
>>  
>> and write it with plain callbacks.
>>
>>
>>  -- 
>> Job Board: http://jobs.nodejs.org/
>> Posting guidelines: 
>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>> You received this message because you are subscribed to the Google
>> Groups "nodejs" group.
>> To post to this group, send email to [email protected]<javascript:>
>> To unsubscribe from this group, send email to
>> [email protected] <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/nodejs?hl=en?hl=en
>>
>
>
>
> -- 
> ------------------------------------------------------
> Tony Huang    [email protected] <javascript:>
>                      [email protected] <javascript:>
>                      [email protected] <javascript:>
>  

-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

Reply via email to