a.t*_*.t. 1 javascript return-value mongodb native-code promise
在名为db_to_var.jsI的 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;
};
Run Code Online (Sandbox Code Playgroud)
但是,car_and_name_parent保持未定义状态,因为car_and_name正确填充的 实际上并未返回到car_and_name_parent。这让我进行了调查,并调查了:
, 的文档.toArray()首先不应该带参数。因此,我检查了dbo.collection("cars").find({}, { projection: { _id: 0, name: 1} }).toArray()实际返回的内容,即[object Promise].
1.a 不能Promise直接计算 a但必须使用then,await或async。
1.b 我能够将其转换Promise为function then() { [native code] }
using.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(..)as console.log(carNames);is undefined 当我这样做时,在那个位置。
如何将car_and_name变量返回到函数外部的变量listCars()?
以下是使用 async await 的方法。
async function listCars() {
let db = await MongoClient.connect(url);
let dbo = db.db("testdb");
return await dbo.collection("cars").find({}, { projection: { _id: 0, name: 1} }).toArray()
}
listCars().then(cars => {
console.log(cars); //You will get your results here
})
Run Code Online (Sandbox Code Playgroud)
上面的 nodejs 中的 mongoDB 查询是异步的,因此您无法直接在变量中获取返回值。您要么必须使用回调函数,要么.then()使用上面示例中的承诺。
您使用的 toArray() 函数是一种 MongoDB 方法,您在问题中提到的方法是 jQuery 方法。这是供您参考的正确文档-> https://docs.mongodb.com/manual/reference/method/cursor.toArray/
希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
678 次 |
| 最近记录: |