Based on http://i.stack.imgur.com/9DDQP.png you need a good thread library that allows pipelined and asynchronous calls to node.
One of these libraries is https://github.com/isaacs/slide-flow-control (see the preso slide there too) and the code diagram for what you need to do is below.
This is self-documenting, and as you can see, it is concise enough, pure nodejs, uml, img, etc. not required.
var chain = require("slide/chain") , asyncMap = require("slide/async-map") ; // start processing main_loop(function() { console.log("its done"); // when finished }); function main_loop(cb) { var res = []; // each entry in chain below fires sequentially ie after // the previous function completes chain ( [ [start_update_q, "user-foo"] , [get_followed_users, chain.last] , [get_favorites, chain.last] , [calc_new_q] , [push_results, chain.last] ] , res , cb ) } function get_favorites(users, cb) { function fn(user, cb_) { get_one_users_favorites(user, cb_); } // this will run thru get_favorites in parallel // and after all user favorites are gotten it will fire // callback cb asyncMap(users, fn, cb); } // code in the various functions in chain here, // remember to either return the callback on completion. // or pass it as an arg to the async call you make within the // function as above ie asyncMap will fire cb on completion
source share