在名为db_to_var.js
的javascript文件中,我具有以下函数,该函数成功将查询返回的数组打印到数据库test_db
到console.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
。这促使我进行调查,然后调查了:
-
The documentation of
.toArray()
,它不应该放在第一位。因此,我检查了dbo.collection("cars").find({},name: 1} }).toArray()
实际返回的内容,即[object Promise]
。1.a无法直接评估
Promise
,而必须使用then
,await
或async
。1.b我可以将
Promise
转换为function then() { [native code] }
使用.then
,但我尚未找到如何进一步评估 表达式以检索“[native code]
”中的列表。的await
返回错误,提示SyntaxError: await is only valid in async function
,而async car_and_name.then
返回错误SyntaxError: Unexpected identifier
。 -
我还尝试将名为
carNames
的全局变量传递给函数,并为其分配值car_and_name
,但是我目前无法成功将全局变量传递给{在该位置上,{1}}和.toArray(..)
一样是未定义的。
如何将console.log(carNames);
变量返回到函数car_and_name
之外的变量?