猫鼬 findOne :异步和同步之间的不同

Posted

技术标签:

【中文标题】猫鼬 findOne :异步和同步之间的不同【英文标题】:mongoose findOne : different between async & sync 【发布时间】:2021-12-04 06:18:19 【问题描述】:

我对知道两者之间有什么不同感到困惑:

var users = Users.findOne(key)

var users = await Users.findOne(key)

【问题讨论】:

【参考方案1】:
var users = Users.findOne(key)

Users.findOne() 方法返回一个可以解决或拒绝的承诺。见promises

所以在上述情况下,users 变量实际上包含一个 promise 对象,如果您想获取解析的数据,您必须执行类似的操作

users.then(data=>
// your db query data
).catch(err=>
// error if something goes wrong
)



    

以下带有 await 的语法实际上为您提供了 promise 的解析数据,请参阅 await

 var users = await Users.findOne(key)

因此,您的 mongodb 的 [key:value] 这样的数据将存储在 users 变量中。

另外await 仅在异步函数中有效,因此您需要将其包装在异步函数中

async function foo()
    var users = await Users.findOne(key)


【讨论】:

以上是关于猫鼬 findOne :异步和同步之间的不同的主要内容,如果未能解决你的问题,请参考以下文章

在express中的每个数组元素中进行猫鼬查询时如何处理异步?

同步异步阻塞和非阻塞之间的区别

NodeJS,从异步等待中获取返回值

猫鼬承诺文档说查询不是承诺?

猫鼬在循环中获取多个对象

异步/同步,阻塞/非阻塞,单线程/多线程概念梳理