【发布时间】:2020-03-24 07:31:06
【问题描述】:
我编写了以下异步 node.js 函数,它通过 Mongoose 访问我的数据库,因此是一个异步函数):
function getWindSpeed(householdID){
return new Promise(async function (resolve, _){
const household = await Household.findById(householdID)
resolve(stoch.norm(household.windSimulation.mu, household.windSimulation.sigma, 1))
})
}
另一方面,我有以下函数,它也是异步的,因为既访问数据库又对数据库中的每个元素使用前面的函数:
async function getMeanWindSpeed() {
return new Promise(async function (resolve, reject){
let numberOfHouseholds = 0
let averageWind = 0.0
console.log('Begin')
await Household.find({}, async function (error, households) {
if(error){
reject(error)
}else{
numberOfHouseholds = households.length
for(let i = 0; i < households.length; i++){
const speed = await wind.getWindSpeed(households[i].id)
console.log(speed)
averageWind += speed
}
}
})
averageWind = averageWind / numberOfHouseholds
console.log('Finish')
resolve(averageWind)
})
}
如您所见,我遍历集合中的所有元素并应用 getWindSpeed() 函数,但它不会等待其完成,因为我根据 console.log(...) 调试消息得到以下跟踪:
Begin
Finish
12.2322
23.1123
(more speeds)
...
更多可能有用的信息:
- 我在另一个异步函数中等待
getMeanWindSpeed()的结果 - 我尝试为数据库中的每个元素返回一个硬编码值(而不是调用
getWindSpeed()并且它工作正常,所以我猜问题出在那个函数上。
提前致谢
【问题讨论】:
标签: node.js asynchronous es6-promise