【发布时间】:2020-03-12 22:35:46
【问题描述】:
在一个名为 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({}, { projection: { _id: 0, 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,但我目前无法成功地将全局变量传递给.toArray(..)中的 @当我在那个位置这样做时,987654351@ 是未定义的。
如何将car_and_name 变量返回到函数listCars() 之外的变量?
【问题讨论】:
标签: javascript mongodb promise return-value native-code