NodeJs + Mongo db无法等待结果

时间:2018-01-19 09:55:41

标签: javascript node.js mongodb asynchronous

我正在使用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

2 个答案:

答案 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_placesasync函数。 。 那么除console.log(" ---------------------- EXIT");以外的其他操作都在await模式..

这条线console.log(" ---------------------- EXIT");永远不会等待执行。但是其他actions处于await模式。因此只要等待它们就会被执行one by one