在Node.js中异步嵌套循环,下一个循环必须在一个完成后才开始

Mau*_*ora 5 asynchronous node.js

检查以下算法......

users = getAllUsers();
for(i=0;i<users.length;i++)
{
    contacts = getContactsOfUser(users[i].userId);
    contactslength = contacts.length;
    for(j=o;j<contactsLength;j++)
    {
         phones = getPhonesOfContacts(contacts[j].contactId);
         contacts[j].phones = phones;
    }
    users[i].contacts = contacts;
}

return users;
Run Code Online (Sandbox Code Playgroud)

我想使用node.js开发这样的逻辑.

我已经尝试使用异步foreachconcatforeachseries功能.但是在第二级都失败了.

当指针获得一个用户的联系人时,i增加的值和下一个用户的进程开始. 它不是在等待为一个用户完成联系人和电话的完成过程.并且只有在启动下一个用户之后.我想实现这一目标.

实际上,我想让用户正确地反对

意味着所有的序列都被毁了,任何人都可以给我一般的想法,我怎样才能实现这样一个系列的过程.我也愿意改变我的算法.

Vad*_*hev 12

在node.js中,您需要使用异步方式.您的代码应该类似于:

var processUsesrs = function(callback) {
    getAllUsers(function(err, users) {
        async.forEach(users, function(user, callback) {
            getContactsOfUser(users.userId, function(err, contacts) {
                async.forEach(contacts, function(contact, callback) {
                    getPhonesOfContacts(contacts.contactId, function(err, phones) {
                        contact.phones = phones;
                        callback();
                    });
                }, function(err) {
                    // All contacts are processed
                    user.contacts = contacts;
                    callback();
                });
            });
        }, function(err) {
            // All users are processed
            // Here the finished result
            callback(undefined, users);
        });
    });
};

processUsers(function(err, users) {
    // users here
});
Run Code Online (Sandbox Code Playgroud)