[英]how to use async await on javascript frontend to receive data from async await node.js backend
[英]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.