在名为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()
,首先不应该接受参数。因此,我检查了.toArray()
实际返回的值,即dbo.collection("cars").find({}, { projection: { _id: 0, name: 1} }).toArray()
。
1.a无法直接评估[object Promise]
,但必须使用Promise
,then
或await
。
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
。
我还尝试将名为SyntaxError: Unexpected identifier
的全局变量传递给函数,并为其分配值carNames
,但是我目前无法成功将全局变量作为car_and_name
传递给.toArray(..)
内部在执行此操作时,在该位置是不确定的。
如何将console.log(carNames);
变量返回到函数car_and_name
之外的变量?
您的方法正在进行异步调用,该异步调用在获取您要查找的值之前立即作为Promise执行。