tor*_*ard 2 javascript node.js
我是异步编程的新手,之前从未做过承诺队列,所以我不知道如何解决这个问题.
我有一张有银行账户的桌子
对于每个银行帐户,我都有一个收据清单
Account 111
- Receipt 001
- Receipt 002
- Receipt 003
Account 222
- Receipt 004
- Receipt 005
- Receipt 006
Run Code Online (Sandbox Code Playgroud)
所以我建立了一个承诺,找到()所有的银行账户.
然后我循环通过所有银行帐户,并为每个帐户我找到所有收据.
我该怎么办?为每个收据find()创建一个承诺?
创建一系列承诺?(你怎么做的顺便说一句)
或者有第三种选择吗?
//
// 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})
})
Run Code Online (Sandbox Code Playgroud)
以下是如何做到这一点:
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);
};
Run Code Online (Sandbox Code Playgroud)
或者这种方式使用该语言的所有功能:
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));
}
});
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6891 次 |
| 最近记录: |