Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么mongoose find方法不是异步的?_Javascript_Node.js_Mongoose_Async Await - Fatal编程技术网

Javascript 为什么mongoose find方法不是异步的?

Javascript 为什么mongoose find方法不是异步的?,javascript,node.js,mongoose,async-await,Javascript,Node.js,Mongoose,Async Await,带有承诺的旧代码 我有一些使用猫鼬的旧代码。它从数据库中获取一些信息AccountViewPermission是一个架构。一切都好。我使用访问它。然后,这使它表现得像一个承诺 AccountViewPermission.find({ requested_by: request.body.credentials.character.id}) .then( permissions => { response.status(200).json(permissions) }) 文档中提到等待

带有承诺的旧代码

我有一些使用猫鼬的旧代码。它从数据库中获取一些信息
AccountViewPermission
是一个架构。一切都好。我使用
访问它。然后,
这使它表现得像一个承诺

AccountViewPermission.find({ requested_by: request.body.credentials.character.id})
.then( permissions => {
  response.status(200).json(permissions)
})
文档中提到等待功能

据我所知,我还应该能够使用asyn/WAIT:

猫鼬查询不是承诺。它们有一个用于co和async/await的.then()函数,以方便使用。但是,与承诺不同,调用查询的.then()可以多次执行查询

但是使用wait会抛出错误

因此,我开始写这段代码,用
wait
而不是(想要的)承诺

但是现在node.js抛出了一个错误:
SyntaxError:await仅在异步函数中有效
。这是真的,但是医生说猫鼬应该仍然可以使用
wait


在这种情况下如何使用wait语法?

如官方文档
中所述,“wait运算符用于等待承诺。它只能在异步函数中使用。”
文档:

Mongoose无法改变javascript处理异步/等待关键字的方式。如果您需要后续信息,请查看文档

要使代码正常工作,必须将其包装在异步函数中。这是没有办法的

异步函数doSomething(){ const permissions=await AccountViewPermission.find({ 请求者:request.body.credentials.character.id }) response.status(200).json(权限)
}正如官方文档中所述,“wait运算符用于等待承诺。它只能在异步函数中使用。”文档:

Mongoose无法改变javascript处理异步/等待关键字的方式。如果您需要后续信息,请查看文档

要使代码正常工作,必须将其包装在异步函数中。这是没有办法的

异步函数doSomething(){ const permissions=await AccountViewPermission.find({ 请求者:request.body.credentials.character.id }) response.status(200).json(权限)
}您会在错误消息中得到答案。您必须将逻辑封装在异步函数中。检查我的答案。你会在错误信息中得到答案。您必须将逻辑封装在异步函数中。检查我的答案。我的错误理解是调用的
find
方法应该是
async
。但是等待必须在异步标记的函数中。也许这个洞察对其他人来说也是一个骗局,因此有了这个评论。我的错误理解是被调用的
find
方法应该是
async
。但是等待必须在异步标记的函数中。也许这一洞见对其他人来说也是一个陷阱,因此这一评论。
const permissions = await AccountViewPermission.find({ requested_by: request.body.credentials.character.id})
response.status(200).json(permissions)