Hi, you can solve the problem with
gate(https://github.com/nakamura-to/gate) and
parray(https://github.com/nakamura-to/parray). Thanks.


var gate = require('gate');
var parray = require('parray');

exports.get_list = function ( cb) {
        rclient.smembers("list", function(err, members) {
                var latch = gate.latch();
                parray.forEach(members, function(member){
                        console.log(member)
                        rclient.hgetall(member, latch(1));
                }, function () {
                        latch.await(function (err, results) {
                                results.forEach(console.log);
                                cb(null, 'lst');
                        });
                });
        });
}


2012/3/20 Angelo Chen <angelochen...@gmail.com>:
> the all in 'hgetall' actually means getting all the properties of that
> member, so for every member it reads the data in, trying out your
> modification, the cb(null, 'lst') was called multiple times.
>
> this is quite a interesting question:
>
> members.forEach(function(member) {
>
> })
>
> cb(null, 'lst‘)
>
> 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?
>
> the real use case is, I got a list, then I'd use the list to retrieve
> the details and check if that details is applicable to certain
> situation, once all check is done, cb(null, 'lst') is called.
>
> any solution to this?
>
>
>
> On Mar 20, 6:20 pm, Oliver Leics <oliver.le...@gmail.com> wrote:
>> The "all" in "hgetall" makes me think it gives me a list.
>> Maybe not what you did expect, because I assumed that rclient.hgetall
>> gives all items to the callback, not only one item.
>>
>> 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)
>>       rclient.hgetall(member, function(err, items) {
>>         if(err) { return cb(err); }
>>         console.log(items)
>>         cb(null, 'lst');
>>       })
>>     })
>>   })
>>
>>
>>
>>
>>
>>
>>
>> }
>
> --
> 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



-- 
Toshihiro Nakamura

-- 
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

Reply via email to