2012-03-15 41 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

相關問題