Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步等待函数.find()mongodb_Javascript_Mongodb - Fatal编程技术网

Javascript 异步等待函数.find()mongodb

Javascript 异步等待函数.find()mongodb,javascript,mongodb,Javascript,Mongodb,如何从异步函数保存变量。如何从mongodb查找?在函数console.log内部,它的工作状态(打印正确的值),在函数外部,它是未定义的 var list; MongoClient.connect(uri, function(err, db) { var dbc = db.db("chat"); dbc.collection("chat_messages").find({user1: data.from, user2: data.to})

如何从异步函数保存变量。如何从mongodb查找?在函数console.log内部,它的工作状态(打印正确的值),在函数外部,它是未定义的

var list;
MongoClient.connect(uri, function(err, db) {
    var dbc = db.db("chat");
    dbc.collection("chat_messages").find({user1: data.from, user2: data.to}).toArray(function (err, result){
         console.log(result[0].msgs);    <---- here its working
                
         list = result[0].msgs;
    });
            
    db.close();
});
console.log(list);     <---- here its not working
var列表;
connect(uri,函数(err,db){
var dbc=db.db(“聊天”);
collection(“chat_messages”).find({user1:data.from,user2:data.to}).toArray(函数(err,result){

console.log(结果[0].msgs);下面是使用async await的方法

async function getList() {
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
})
NodeJ中的mongoDB查询(如上面的查询)是异步的,因此无法直接在变量中获取返回值。必须使用回调函数或.then()才能使用上面示例中的承诺


您正在使用的toArray()函数是一个MongoDB方法,您在问题中提到的是一个jQuery方法。这是供您参考的正确文档->

您需要将整个代码块变成一个
异步等待
代码块,或者接受
然后
块的帮助

let conn = await client.connect(url);
let db = conn.db("test");
const results =  await db.collection("cars").find({}, { projection: { _id: 0, name: 1} }).toArray()

在这里,
结果
将有您的输出

尝试使用承诺,查看示例:

const list=新承诺(函数(解析、拒绝){
connect(uri,函数(err,db){
var dbc=db.db(“聊天”);
collection(“chat_messages”).find({user1:data.from,user2:data.to}).toArray(函数(err,result){
如果(错误){
拒绝(错误);
}否则{
决心(结果);
}
db.close();
});   
});
});
如果您需要,请使用“作为承诺”:

list.then(arrayList=>{
console.log(arrayList[0].msgs);
}).catch(err=>console.log(err.message));
或者,强制运行同步

const msgs=(等待列表)[0];

不起作用,因为它是一个异步函数,console.log在设置值之前运行sync!我该怎么办?我已经尝试了所有方法,这回答了你的问题吗?看看我的答案,我写了一个示例!它说:const list=new Promise(resolve,reject,function();参考错误:解决不是我的错,我修复,再试一次!非常感谢你,你是个了不起的家伙!!!