5

I am trying to understand how to design node.js applications, but it seems there is something I can't grasp about asynchronous programming.

Let's say my application needs to access a database. In a synchronous environment I would implement a data access class with a read() method, returning an associative array.

In node.js, because code is executed asynchronously, this method can't return a value, so, after execution, it will have to "do" something as a side effect. It will then contain some code which does something else than just reading data.

Let's suppose I want to call this method multiple times, each time with a different success callback. Since the callback is included in the method itself, I can't find a clean way to do this without either duplicating the method or specifying all possible callbacks in a long switch statement.

What is the proper way to handle this problem? Am I approaching it the wrong way?

asked Sep 4, 2012 at 17:40
3
  • 2
    It is not very clear what is your problem, maybe rephrase it. I'd have two comments: 1. Maybe you just need to get used to async/callback way of doing things, I do not see anything like "unmanageable code soup" there. 2. Ad "loosely coupled classes": do you really need "classes" there? Classes are not needed to do OO neither to do good design. Maybe change the title. Commented Sep 4, 2012 at 18:18
  • I'm not certain what this code soup is either? Commented Sep 4, 2012 at 20:58
  • I changed the title and rephrased the question. I hope it is clearer now. Commented Sep 5, 2012 at 6:37

1 Answer 1

11

Since you can pass functions as parameters, it is common to pass a "callback" function to these sorts of functions. So, for example, you may have a "read" function that looks like this:

function getUser(userId, callback) {
 var mydbAPI = something;
 var myQuery = somethingElse;
 mydbAPI.getUser(myQuery, function(data) {
 //parse data a little here:
 myParsedData = ...;
 callback(myParsedData);
 });
}

You can then call the read method like this:

getUser(userId, function(parsedData) {
 //...do something with parsedData
});
answered Sep 4, 2012 at 17:48

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.