this works, here is the final version, thanks: exports.get_list = function (cb) { rclient.smembers("list", function (err, members) { var len = members.length members.forEach(function (member) { console.log(member) rclient.hgetall(member, function (err, item) { console.log(item) len -- if (len === 0) cb(null, 'lst') }) }) }) }
On Mar 20, 9:03 pm, Oliver Leics <oliver.le...@gmail.com> wrote: > > since forEach is a synchronous as you pointed out, cb got called at > > end of the loop, that's what I was expecting, but when every iteration > > also calls an asynchronous callback, that will be different as those > > asynchronous calls in fact happens after the cb(null, 'lst'), how to > > deal with this kind of situation? > > Get the definite number of comming items: > > exports.get_list = function (cb) { > rclient.smembers("list", function(err, members) { > if(err) { return cb(err) } > if(members.length==0) return cb(null, 'lst'); > members.forEach(function(member){ > console.log(member) > > var pending = rclient.hnumall(member); > if(!pending) cb(null, 'lst') > > rclient.hgetall(member, function(err, item) { > if(err) { return cb(err) } > console.log(item) > if(!(--pending)) cb(null, 'lst') > }) > }) > }) > > } > > Or use an second callback on rclient.hgetall and call it at the end of > iteration: > > rclient.hgetall(member, cb, cbDone) -- 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 nodejs@googlegroups.com To unsubscribe from this group, send email to nodejs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en