async等待来自后端node.js的数据返回



我有这个函数:

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)

当我运行这个函数时,它不会等待后端返回任何内容。我该怎么解决这个问题?

我的建议是:

你把你所有的功能都放在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) 
}
});
})
}
}
}
}

您需要向await承诺MongoClient.connect回调。

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
}
}

最新更新