繁体   English   中英

异步等待从后端返回的数据 node.js

[英]async await data return from backend node.js

我有这个 function:

module.exports = async function(username, password, mongo_uri, cluster, collection) {
    
    let client = new MongoClient(mongo_uri)
    let database = client.db(cluster)
    let collection_name = database.collection(collection)

    
    if (!username || !password || !username && !password) {
        return false
    } else {
        //query mongo
       MongoClient.connect(mongo_uri, async function(err, db) {
            if (err) {
                console.log(err);
            }
            collection_name.find({'email': username}).toArray(async function(e,doc){
                if(doc.length === 0) {
                    db.close();
                    return false
                } else {
                    db.close();
                    return true
                }
            });
        })
    }
 } 

我在前端有这个:

 let results = await mongo_login_api(username, password, mongo_uri, cluster, collection)
console.log("results")
console.log(results)

当我运行这个 function 时,它不会等待后端返回任何内容。 我怎样才能解决这个问题?

我的建议是:

你把你的所有功能都放在 Promise 中。

例如:

module.exports = function(username, password, mongo_uri, cluster, collection) {
    return new Promise((resolve, reject) => {
       let client = new MongoClient(mongo_uri)
       let database = client.db(cluster)
       let collection_name = database.collection(collection)

    
       if (!username || !password || !username && !password) {
          resolve(false)
       } else {
        
        
        //query mongo
       MongoClient.connect(mongo_uri, async function(err, db) {
            if (err) {
                console.log(err);
            }
            collection_name.find({'email': username}).toArray(function(e,doc){
                if(doc.length === 0) {
                    db.close();
                    resolve(false)
                } else {
                    db.close();
                    resolve(true) 
                }
            });
        })
      }
     }
    }
 }

您需要 promise MongoClient.connect回调来await它。

module.exports = async function(username, password, mongo_uri, cluster, collection) {
    let client = new MongoClient(mongo_uri)
    let database = client.db(cluster)
    let collection_name = database.collection(collection)

    if (!username || !password || !username && !password) {
        return false
    } else {
        const result = await new Promise((resolve, reject) => {
            //query mongo
            MongoClient.connect(mongo_uri, function(err, db) {
                if (err) {
                    console.log(err);
                }
                collection_name.find({
                    'email': username
                }).toArray(function(e, doc) {
                    if (doc.length === 0) {
                        db.close();
                        resolve(false)
                    } else {
                        db.close();
                        resolve(true)
                    }
                });
            })
        })
        return result
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM