繁体   English   中英

如何修复此异步/等待 function?

[英]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.

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