2012-03-15 43 views
5

检查以下算法...嵌套循环在异步的NodeJS,下一个循环必须只有一个被完成

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; 

后,我想用node.js中发展这种相同的逻辑开始

我尝试过使用asyncforeachconcatforeachseries的功能。但都在第二级失败。

虽然指针正在获取一个用户的联系人,但值增加并且下一个用户正在开始处理。 它并没有等待为一个用户完成电话联系&的过程。并且仅在那个开始下一个用户之后。我想实现这一点。

其实我想要得到的用户提供适当的

表示所有序列越来越毁了对象,任何人都可以给我,我怎么能取得这样的一系列过程的总体思路。我也愿意改变我的算法。

回答

11

在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 
}); 
+0

感谢兄弟!它的工作方式与预期的完全一样。 – 2012-03-16 06:57:21

+0

只需进行一些更改,即可编辑这些更改 – 2012-03-16 06:57:38

相关问题