[英]How do I correctly await the return of an async function in javascript?
[英]How do I fix this async/await function?
我正在尝试使用 async 和 await 获取 mongodb 集合中的文档数。 当我运行这段代码时,我得到“TypeError:cb 不是函数”。
我已经尝试使用 Promise 来实现它,但是我对这个主题仍然缺乏经验,我仍在学习如何使用 Promise。
这是电话
getFlashCard : function(colName, flashID, callback) {
var docCount = documentCount();
console.log(docCount);
}
这是 function
async function documentCount() {
const count = await mongodb.collection("Interview Questions").count();
return count;
}
我收到一条错误消息,上面写着“ cb(err, val) ^
TypeError: cb is not a function at runInAsyncScope"
实际上,您不需要async
并为此await
,因为它已经是 promise。 只需在末尾添加then
:
mongodb.collection("Interview Questions").count().then(count => {
console.log("counted: " + count)
})
documentCount()
是一个async
function。 因此,它返回 promise。 所有async
函数都返回 promise。 因此,从 promise 中获取值的方式与任何 promise 相同。 您使用.then()
或await
它。 因此,在getFlashCard()
中,您可以执行以下操作:
getFlashCard : function(colName, flashID, callback) {
documentCount().then(docCount => {
console.log(docCount);
}).catch(err => {
console.error(err);
});
}
这假设您正在正确使用mongodb.collection().count()
并且它返回 promise。 如果不是这种情况,那么您还必须解决这个问题(我个人不知道 mongodb)。
仅供参考,您似乎创建了documentCount()
希望将异步值转换为同步值。 你不能在 Javascript 中这样做。 虽然await
在 function 中暂停执行并让您看起来为异步操作编写更多同步的代码,但它在 function 边界上不起作用。 您不能在 Javascript 中将异步值更改为同步值。 因此,任何想要使用docCount
值的人都必须像上面在getFlashCard()
中显示的那样异步处理它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.