nodejs承诺数组,我该怎么做?

我对asynchronous编程非常陌生,以前从来没有做过承诺,所以我不知道如何解决这个问题。

我有一个银行帐户表

为每个银行帐户我有一个收据清单

Account 111 - Receipt 001 - Receipt 002 - Receipt 003 Account 222 - Receipt 004 - Receipt 005 - Receipt 006 

所以我设定了一个承诺,find()所有的银行账户。

然后我循环所有的银行帐户,并为每个帐户我find所有收据。

我该怎么办? 为每个收据find()创build一个承诺?

创build一个承诺数组? (你怎么做那btw)

还是有第三个select?

 // // Find all bank accounts // var findBank = new Promise( (resolve, reject) => { bankTable.find({} ,function(err, data) { if (!err) { resolve(data); } else { reject(new Error('findBank ERROR : ' + err)); } }); }); // // Find the RECEIPTS for each bank account // var findAllReceipts = function(accountArray) { for (var i=0; i<accountArray.length; i++) { var findReceipt = new Promise( (resolve, reject) => { receiptTable.find( { accountNo: accountArray[i].accountNo } ,function(err, data) { if (!err) { resolve(data); } else { reject(new Error('findPrice ERROR : ' + err)); } }); }); } } // // Run the promises // findBank .then(findAllReceipts) .catch(err => { console.log("getbankAccountReport ERR: " + err); res.json({error:true,err}) }) 

这里是你如何做到这一点:

 let findAllReceipts = function (accountArray) { const a = []; for (let i = 0; i < accountArray.length; i++) { a.push(new Promise((resolve, reject) => { receiptTable.find({accountNo: accountArray[i].accountNo}, function (err, data) { if (!err) { resolve(data); } else { reject(new Error('findPrice ERROR : ' + err)); } }); })); } return Promise.all(a); }; 

或者这样使用语言的所有function:

 let findAllReceipts = function (accountArray) { return Promise.all(accountArray.map(findReceipts)); }; function findReceipts(account) { return new Promise((resolve, reject) => { receiptTable.find({accountNo: account.accountNo}, function (err, data) { if (!err) { resolve(data); } else { reject(new Error('findPrice ERROR : ' + err)); } }); }); }