Have your module expose a create method that makes the initial request to
get the version and have that return an object with all of the logic tied
to the specific server version to the callback. That way you can avoid
needing to check the version in all the subsequent calls.

-- Daniel R. <[email protected]> [http://danielr.neophi.com/]
Hello!

I am pretty new to nodejs and I'm writing a client api module that will
provide CRUD operations by calling json-rpc methods on an outside server.
 The server provides it's currently running version via a json-rpc request
and based on that the client api may or may not have additional
functionality.

My question is more of a design question than anything else.  I'm not sure
the best way to get the server's version and cache it within an
asynchronous environment.  I am currently using the http module to make the
requests and the q module to use promises.  Below is some pseudo code to
illustrate basically what I have.


function Client(url, opts) {
>     var info = {
>         'url': url,
>         'server_version': null
>     };
> };
>


Client.prototype.server_version = function (cb) {
>     if (!this.info.server_version){
>         this.request("info").then(function(result) {
>             this.info.server_version = result.version;
>         }).nodeify(cb);
>     } else {
>         cb(this.info.server_version);
>     };
> };
>


Client.prototype.read = function(params, cb) {
>     this.server_version(function(err, result) {
>         if (result > [3, 3, 0]) {
>             ...
>         };
>         else {
>             ...
>         }
>     });
>     return this.request(params).nodeify(cb);
> };
>


Client.prototype.request = function(method) {
>     defer = Q.defer();
>     ...
>     return defer.promise;
> };



I guess my question is this the "right" way to deal with figuring out the
server version to make logical decisions at various points in the code?  I
see a few issues with the way I am currently doing it, if the
server_version is requested multiple times before it's been cached there
will be unnecessary additional calls made to the server.  It would be nice
to have a better way to attach callbacks to the original promise that's
made when the first request is sent out.  Also using always using a
callback and nested functions to check the server version feels a bit
inelegant.  I'm not sure if this is the way it needs to be done.  Is this a
situation where I would want to use yield?  If so do I need to run the
unstable 11.* version of Node to take advantage of that?

I apologize in advance if this question is vague.  I am trying to
understand how to do something asynchronous that I would normally do
synchronously, ie: halting code flow the first time a call to check the
server_version is made and being able to reference
"this.info.server_version" afterwards versus always having to use a
callback to do the check.

Any and all advice is much appreciated.

Best,

Tony

-- 
Job board: http://jobs.nodejs.org/
New group rules:
https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules:
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 unsubscribe from this group and stop receiving emails from it, send an
email to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/nodejs/CAJhmvsQZf1_us0MKV%2BuYPyejA2C-W%2BGBAyO%3DNYUczsHbDG8Fqw%40mail.gmail.com<https://groups.google.com/d/msgid/nodejs/CAJhmvsQZf1_us0MKV%2BuYPyejA2C-W%2BGBAyO%3DNYUczsHbDG8Fqw%40mail.gmail.com?utm_medium=email&utm_source=footer>
.
For more options, visit https://groups.google.com/d/optout.

-- 
Job board: http://jobs.nodejs.org/
New group rules: 
https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules: 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/nodejs/CAETDeSBUJnvVfC0ZPRy7bT6HFnc5o_forJ_WmuZfgZ%2BagnxfUQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to