【发布时间】:2019-11-14 08:01:12
【问题描述】:
在函数中单独使用 async/await 会返回一个“待定值”,但如果使用了 Promise,那么最终将返回实际值。这是等待异步操作完成的理想方式吗?
这正是我想要的结果
var foundForm = await getDocument(query) //Returns the resulting document
async function getDocument(query){
return new Promise((resolve,reject) =>{
MongoClient.connect (url, async function(err, db) {
if (err) throw err;
console.log(query)
db.collection("users").find(query).toArray(function(err, result) {
if (err) {
console.log(err)
throw err;
}
console.log(result);
db.close();
resolve(result) // returns result;
});
});
})
}
这不会返回我需要的内容:
var foundForm = await getDocument(query) //Returns 'pending'
async function getDocument(query){
MongoClient.connect (url, async function(err, db) {
if (err) throw err;
console.log(query)
db.collection("users").find(query).toArray(function(err, result) {
if (err) {
console.log(err)
throw err;
}
console.log(result);
db.close();
return result;
});
})
}
【问题讨论】:
-
您能否使用edit 澄清一下您的代码示例。此外,据我所知,您的内部 MongoClient.connect 回调不需要
async,因为您不需要等待任何东西。我敢说没有理想的处理方式,async/await 是 promise 实现的语法糖,只是处理一些人们不喜欢的关于 promise 链的事情。您在第二段代码中获得的待处理只是因为您没有解决或拒绝,所以它们是您如何编写该代码的错误 -
第一个函数立即返回一个解析为回调结果的 Promise,第二个函数什么也不返回,
return result;是从回调中返回而不是getDocument()函数 -
@WilliamLohan 当然!现在这很有意义
标签: javascript node.js asynchronous