ExpressJS - функция, возвращающая неопределенный - PullRequest
0 голосов
/ 04 апреля 2020

функция checkFamilyStatus() продолжает возвращать неопределенное значение по какой-то причине, когда она должна возвращать логическое значение из коллекции mongodb.

Здесь немного контекста - я решил отделить часть logi c от методов маршрутизатора, таких как методы get и post, чтобы она выглядела чистой и понятной, как в функциональном программировании. Поэтому я поместил часть logi c в функции и вызвал их внутри методов маршрутизатора, но это не сработало. Кроме того, я не знаю, хорошая ли это практика или нет. Разве не было бы намного легче читать, если бы вы делали так, вместо того, чтобы поместить целый пакет кода в одном месте?

Я застрял на этом куске кода некоторое время. Я немного запутался в работе асинхронного 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 ?
      });
    };

1 Ответ

0 голосов
/ 04 апреля 2020

При условии, что логика c за account.hasFamily верна, тогда вам нужно await для возврата, поэтому она должна быть return await account.hasFamily;

...