将MongoDB查询结果作为变量而不是返回到控制台

问题描述 投票:0回答:1

在名为db_to_var.js的javascript文件中,我具有以下函数,该函数将查询返回的数组成功打印到数据库test_dbconsole.log()。 (例如,具有cars键的名为name的数据库描述了品牌名称,例如toyota, hyunday,volvo。)。该方法使用以下命令调用:console.log("listCars function call="+listCars());并包含:

function listCars() { 
    car_and_name_grandparent = MongoClient.connect(url, function(err, db) {
        if (err) throw err;
        var dbo = db.db("testdb");

        car_and_name_parent = dbo.collection("cars").find({}, { projection: { _id: 0, name: 1} }).toArray(function(err, result) {
            if (err) throw err;
            car_and_name = result;
            db.close();

            console.log("car_and_name="+car_and_name);
            return car_and_name;
        });

        return car_and_name_parent;
    });

    return car_and_name_grandparent;
}; 

但是,car_and_name_parent仍未定义,因为正确填充的car_and_name实际上并未返回到car_and_name_parent。这促使我进行调查,并调查了:

  1. The documentation of .toArray(),首先不应该接受参数。因此,我检查了.toArray()实际返回的值,即dbo.collection("cars").find({}, { projection: { _id: 0, name: 1} }).toArray()

    1.a无法直接评估[object Promise],但必须使用Promisethenawait

    1.b我可以将async转换为Promise使用function then() { [native code] },但我尚未找到如何进一步评估表达式以从“ .then”中检索列表。的[native code]返回错误,提示await,而SyntaxError: await is only valid in async function返回错误async car_and_name.then

  2. 我还尝试将名为SyntaxError: Unexpected identifier的全局变量传递给函数,并为其分配值carNames,但是我目前无法成功将全局变量作为car_and_name传递给.toArray(..)内部在执行此操作时,在该位置是不确定的。

如何将console.log(carNames);变量返回到函数car_and_name之外的变量?

javascript mongodb promise return-value native-code
1个回答
0
投票

您的方法正在进行异步调用,该异步调用在获取您要查找的值之前立即作为Promise执行。

© www.soinside.com 2019 - 2024. All rights reserved.