我正在使用NodeJs和MongoDB来开发一个Web Api。
我遇到的问题是我的等待声明没有被等待...
这是一个代码示例和输出,对我来说没有任何意义..
代码
async find_nearby_places(lng, lat, tag, maxDistance) {
let results = [];
await MongoClient.connect(url, async function (err, db) {
let places= db.db(db_name).collection(collection_places);
let nearbyplaces = places.find({
"location":
{
$near:
{
$geometry: {
coordinates: [lng, lat]
},
$maxDistance: maxDistance
}
},
"tags": {
$in: [tag]
}
});
await nearbyplaces.toArray().then(
async placeArray => {
placeArray.forEach(place => {
console.log("API: FOUND place");
results.push(placeModel.ToplaceModel(place))
});
await db.close();
});
console.log(' ---------------------- DONE')
});
console.log(" ---------------------- EXIT");
}
输出
---------------------- EXIT
API: FOUND place
API: FOUND place
---------------------- DONE
预期输出
API: FOUND place
API: FOUND place
---------------------- DONE
---------------------- EXIT
答案 0 :(得分:1)
等待只返回一个promise,对于带回调的函数,必须定义新的promise。
async find_nearby_places() {
await new Promise((resolve, reject) => {
MongoClient.connect(url, async function (err, db) {
//Do tasks
Promise.resolve()
}
})
}
解决方案可以使用任何值完成,在这种情况下,promise将返回返回的值。
答案 1 :(得分:0)
您的函数find_nearby_places
是async
函数。
。
那么除console.log(" ---------------------- EXIT");
以外的其他操作都在await
模式..
这条线console.log(" ---------------------- EXIT");
永远不会等待执行。但是其他actions
处于await
模式。因此只要等待它们就会被执行one by one