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)); } }); }); }
- 我的sails.js服务返回“未定义”的调用控制器的行动
- InvalidParameterValueException:为函数定义的angular色不能由Lambda承担
- 简单的WebApp – 通过HTML / AWS Javascript SDK将file upload到S3
- 在NodeJS事件循环中轮询阶段
- 在将string转换为对象时获取syntaxError意外的令牌
- 无法为dynamichtml页面使用句柄hapi js和node js提供静态文件
- typeerror:app.use()需要中间件function
- 为passport.js本地策略添加额外的字段
- 如何将parameter passing给MEAN.js包的express.js服务器端路由。