Nodejs 脚本在不等待 Mongodb 查询的情况下执行

Nodejs script executing without waiting for Mongodb query

我在 nodejs 文件中有以下部分

client.db('metro4').collection('Station').findOne({"Name": variabled2}, function(err, res2) {
        if(err) throw err;
        variabled2 = res2._id;
        console.log("id2 = ", res2._id);
    });

console.log("v= ",variabled2);

myFunc(variabled);

myFunc 函数也有一些 mongodb 查询。

问题出在执行顺序上。

v = undefined
then some of function results (which are obviously wrong)
id2 = 4
then other of functions results

我来自 运行 MySQL 节点内部的查询,即使在长存储过程中也没有这些问题。

现在建议了很多答案'async and await'。所以,我做了 myFunc async 并尝试了这个

(async function() {
        await recur2();
    })();

但正如预期的那样,结果几乎相同,因为程序没有等待第一次查询。

此外,我发现 .then()Promises 相似,但当我在上面的查询中使用回调函数时,它们显然不起作用。

提前致谢。

第一个查询正在使用回调,因此它不会等待完成。所以你需要的是 await 第一个查询,或者将 myFunc 放入回调中。

放在回调中

let variabled2;
client.db('metro4').collection('Station').findOne({"Name": variabled2}, 
    function(err, res2) {
        if(err) throw err;
        variabled2 = res2._id;
        console.log("id2 = ", res2._id);

        myFunc(variabled);
    });

async/await

(async function() {
    let variabled2;
    const res2 = await client.db('metro4').collection('Station').findOne({"Name": variabled2})
    variabled2 = res2._id;
    console.log("id2 = ", res2._id);
    myFunc(variabled);
})()

我建议使用 async/await 解决方案,因为它更干净。