javascript - 猫鼬方法发现问题
问题描述
当我已经在模型函数中完成了 await 时,为什么还要调用 await 2 次:
async function model() { return await data.find({}, '-_id -__v') }
如果我console.log await data.find({}, '-_id -__v')
在模型函数中,我将看到包含正确数据的数组。
但是在控制器函数模型函数中返回一个Promise而不仅仅是一个数组,所以我应该再次使用 await:
async function controller(req, res) {
return res.status(200).json(await model())
}
我不明白为什么它会这样工作。
请帮我解决这个问题。
解决方案
因为当您使用 async 关键字时,您的函数将始终返回一个承诺,因此使用 async await 可能会很棘手:P
你也不需要在模型()中使用等待,因为你正在返回数据,所以我建议你使用
function model() { return data.find({}, '-_id -__v') }
async function controller(req, res) {
return res.status(200).json(await model())
}
解释一下为什么你不必在 model() 函数中使用 await ,那是因为 data.find() 是一个承诺,所以你只需要返回它,如果你使用 async await 你不要返回数据你也返回一个承诺,所以没有必要,这可能会令人困惑
推荐阅读
- pandas - 熊猫从索引列中选择范围
- android - 为什么我的 .mp3 没有播放,而是显示“prepare(); is an unreported exception IOException; must be catch or declare to be throw”?
- android - 在某些网格项目上设置不同的颜色
- asp.net-core - 目标项目与迁移程序集不匹配
- php - 使用 PHP 和 jQuery 将 PDF 打印到页面
- java - 如何读取 ActiveJDBC 的属性值设置?
- python-3.x - 在新环境中无法在 Anaconda 中安装 pyexcel
- python - 如何将 ascii 编码的图像数据解码为图像文件?
- amazon-web-services - AppSync 和 GraphQL 枚举突变
- python - pyHook event.Time 返回不规则时间戳