2012-03-15 42 views
5

Kiểm tra dưới đây thuật toán ...vòng lồng nhau không đồng bộ trong nodejs, vòng lặp tiếp theo phải bắt đầu chỉ sau một được hoàn

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; 

Tôi muốn phát triển cùng một logic như sử dụng node.js.

Tôi đã thử sử dụng async với các chức năng foreachconcatforeachseries. Nhưng tất cả đều thất bại ở cấp độ thứ hai.

Trong khi con trỏ đang nhận địa chỉ liên hệ của một người dùng, giá trị của i tăng và quá trình đang bắt đầu cho người dùng tiếp theo. Nó không phải là chờ đợi cho quá trình lấy địa chỉ liên lạc & điện thoại để hoàn thành cho một người dùng. và chỉ sau khi bắt đầu người dùng tiếp theo. Tôi muốn đạt được điều này.

Thật sự tôi muốn có được những người sử dụng đối tượng với đúng

phương tiện tất cả các chuỗi được việc bị hủy hoại, bất cứ ai có thể cho tôi ý tưởng chung làm thế nào tôi có thể đạt được quá trình hàng loạt như vậy. Tôi cũng mở để thay đổi thuật toán của mình.

Trả lời

11

Trong node.js bạn cần sử dụng cách không đồng bộ. Mã của bạn phải trông giống như sau:

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

Cảm ơn bro! nó hoạt động chính xác như mong đợi .... –

+0

Chỉ cần một số thay đổi, chỉnh sửa những thay đổi đó –

Các vấn đề liên quan