2012-03-15 7 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. का उपयोग कर इस तरह के एक ही तर्क विकसित करना चाहते हैं

मैं foreach और concat और foreachseries कार्यों के साथ async उपयोग करने की कोशिश की है। लेकिन सभी दूसरे स्तर पर विफल रहता है।

जबकि पॉइंटर एक उपयोगकर्ता के संपर्क प्राप्त कर रहा है, i का मूल्य बढ़ता है और अगले उपयोगकर्ताओं के लिए प्रक्रिया शुरू हो रही है। यह एक उपयोगकर्ता के लिए संपर्क & फोन प्राप्त करने की प्रक्रिया की प्रतीक्षा नहीं कर रहा है। और उसके बाद ही अगले उपयोगकर्ता को शुरू करने के बाद। मैं इसे हासिल करना चाहता हूं।

असल में मैं किसी मुझे सामान्य विचार मैं ऐसी श्रृंखला प्रक्रिया कैसे प्राप्त कर सकते हैं दे सकते हैं उन उचित

मतलब सभी दृश्यों को बर्बाद कर दिया जा रहा है के साथ वस्तु प्राप्त करना चाहते हैं,। मैं अपने एल्गोरिदम को भी बदलने के लिए खुला हूं।

उत्तर

11

नोड.जेएस में आपको एसिंक्रोनस तरीके का उपयोग करने की आवश्यकता है। आपका कोड कुछ ऐसा दिखना चाहिए:

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

धन्यवाद भाई! यह बिल्कुल अपेक्षित काम कर रहा है .... –

+0

बस कुछ बदलाव, उन परिवर्तनों को संपादित करना –

संबंधित मुद्दे