使用Promise调用API内部for循环的最佳方法

我有5亿个对象,每个对象有n个联系人,如下所示

var groupsArray = [ {'G1': ['C1','C2','C3'....]}, {'G2': ['D1','D2','D3'....]} ... {'G2000': ['D2001','D2002','D2003'....]} ... ] 

我在nodejs中有两种实现方式,它们是基于常规的承诺,另一种是使用蓝鸟,如下所示

定期的承诺

 ... var groupsArray = [ {'G1': ['C1','C2','C3']}, {'G2': ['D1','D2','D3']} ] function ajax(url) { return new Promise(function(resolve, reject) { request.get(url,{json: true}, function(error, data) { if (error) { reject(error); } else { resolve(data); } }); }); } _.each(groupsArray,function(groupData){ _.each(groupData,function(contactlists,groupIndex){ // console.log(groupIndex) _.each(contactlists,function(contactData){ ajax('http://localhost:3001/api/getcontactdata/'+groupIndex+'/'+contactData).then(function(result) { console.log(result.body); // Code depending on result }).catch(function() { // An error occurred }); }) }) }) ... 

使用蓝鸟的方式,我已经使用并发来检查如何控制承诺的队列

 ... _.each(groupsArray,function(groupData){ _.each(groupData,function(contactlists,groupIndex){ var contacts = []; // console.log(groupIndex) _.each(contactlists,function(contactData){ contacts.push({ contact_name: 'Contact ' + contactData }); }) groups.push({ task_name: 'Group ' + groupIndex, contacts: contacts }); }) }) Promise.each(groups, group => Promise.map(group.contacts, contact => new Promise((resolve, reject) => { /*setTimeout(() => resolve(group.task_name + ' ' + contact.contact_name), 1000);*/ request.get('http://localhost:3001/api/getcontactdata/'+group.task_name+'/'+contact.contact_name,{json: true}, function(error, data) { if (error) { reject(error); } else { resolve(data); } }); }).then(log => console.log(log.body)), { concurrency: 50 }).then(() => console.log())).then(() => { console.log('All Done!!'); }); ... 

我想知道什么时候用promise来处理循环内部的1亿个API。 请build议asynchronous调用API并稍后处理响应的最佳方式。