Спасибо, серия Control Flow in Node очень помогает

еревести следующий псевдокод синхронизации в асинхронный код js

result = []
for pid in r.smembers('active_prog'):
    for prog_obj in r.hgetall("prog:" + pid):
        for item_obj in r.hgetall("item:" + prog_obj['iid']):
            prog_obj['items'].append(item_obj)
        result.append(prog_obj)
return result

Это кажется естественным в программировании синхронизации:

получить некоторые идентификаторы,получить предметы по идентификаторуполучить соответствующую информацию для каждого элемента и прикрепить эту информацию к нимобъединить все элементы в массив и вернуть

Я пытался использовать MULTI, но, кажется, не работает, когда рекурсия идет глубже.

Есть ли рекомендации по обучению программированию в асинхронной парадигме? (Желательно в js-коде, а не в .net)