【问题标题】:ExpressJS - function returning undefindedExpress JS - 返回未定义的函数
【发布时间】:2020-07-16 15:53:01
【问题描述】:

function checkFamilyStatus() 出于某种原因一直返回 undefined,当它应该从 mongodb 集合中返回一个布尔值时。

这里有一点上下文 - 我决定将逻辑部分与路由器方法(如 get 和 post 方法)分开,以使其看起来像函数式编程一样清晰易懂。所以我把逻辑部分放在函数中,并在路由器方法中调用它们,但没有成功。此外,我不知道这是否是一个好习惯。如果这样做不是更容易阅读,而不是说将一大堆代码放在一个地方吗?

我已经被这段代码困住了一段时间。我对整个异步 JS 的工作感到有些困惑。我做了一些研究,但仍然不明白为什么这不起作用。有人可以为我澄清一下吗?

// post method 
router.post("/create", ensureAuthenticated, async(req, res) => {
      let userID = req.user.id;
      console.log(await checkFamilyStatus(userID)); // but returns undefined
      // rest of the code
    }



    // check family status
    checkFamilyStatus = async userID => {
      Account.findOne({
        _id: userID
      }, (err, account) => {
        return account.hasFamily; // should return boolean value ?
      });
    };

【问题讨论】:

  • post 方法不应该等到 checkFamilyStatus() 完成吗?直到它返回承诺?

标签: node.js express asynchronous mongoose async-await


【解决方案1】:

假设account.hasFamily背后的逻辑是正确的,那么返回需要await,所以应该是return await account.hasFamily;

【讨论】:

  • 是的,在 checkFamilyStatus() 中,正在正确查询 account.hasFamily 的值,因为我尝试控制台在函数 checkFamilyStatus() 中记录其值。但它不会将其返回到 post 方法。
  • 我试过照你说的做,但还是和以前一样。仍然返回未定义。此外,为什么我需要在 return 语句中添加 await 关键字?你能澄清一下吗?据我所知,'account' 作为回调传递给 Mongoose findOne() 函数,所以我不需要等待该值,对吧?
猜你喜欢
  • 2018-03-26
  • 1970-01-01
  • 2012-11-29
  • 2021-12-05
  • 2012-08-25
  • 1970-01-01
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多