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?
3
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
});