如何从Node.js中的返回/回调聚合中获取价值?
function getAmount(vcode,callback){db.get().collection('general_journal').find({coa_code:vcode}).limit(1).toArray(function(err, result) {
if (err) return callback(err);
callback(null, result);
})}
function getlist(callback) {
db.get().collection().find({}).toArray(function(err, result) {
var vData = [];
if (err) return callback(err);
result.forEach(function(row){
vData.push({coa_code:row.coa_code,amount:getAmount(row.coa_code)})
})
callback(null, vData);
})}
getlist();
由于Amount值始终未定义,请帮助解决此问题,谢谢
答案 0 :(得分:0)
由于getAmount
是异步的,因此在调用Promise.all
的回调之前,您必须使用getList
等待所有行的请求得到解决。更改getAmount
以返回Promise
而不是使用回调使事情变得简单:
function getAmount(vcode){
return new Promise((resolve, reject) => {
db.get().collection('general_journal').find({coa_code:vcode}).limit(1).toArray(function(err, result) {
if (err) return reject(err);
resolve(result);
})
});
}
function getlist(callback) {
db.get().collection().find({}).toArray(function(err, result) {
if (err) return callback(err);
// Map each row to a Promise that resolves to an object:
Promise.all(
result.map(({ coa_code }) => getAmount(coa_code).then(amount => ({ amount, coa_code })))
)
.then(vData => {
callback(null, vData);
});
})
}