首页 > 解决方案 > 猫鼬方法发现问题

问题描述

当我已经在模型函数中完成了 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())
}

我不明白为什么它会这样工作。

请帮我解决这个问题。

标签: javascriptnode.jsmongodbmongooseasync-await

解决方案


因为当您使用 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 你不要返回数据你也返回一个承诺,所以没有必要,这可能会令人困惑


推荐阅读