【问题标题】:Async / Await with NodeJS + Mongoose doesn't waitAsync / Await with NodeJS + Mongoose 不等待
【发布时间】:2020-08-03 05:53:51
【问题描述】:

无法让异步/等待功能在我的纸牌游戏应用中正常工作。

(a) 我收到没有数据的 201 响应。

(b) 甲板文档似乎是在之后创建的,其中玩家字段为空数组,表明它是在甲板保存到 mongoDB 之后完成的

下面是我的代码。任何帮助表示赞赏。

router.js

router.post('/game', (req, res, next) => {
  try {
    const { cards, playerNames, attributes } = req.body;

    const newDeck = deck.start(cards, playerNames, attributes);
    res.status(201).send(newDeck);
  } catch (err) {
    next(err);
  };
});

/services/deck.js

 exports.start = async (cards, playerNames, attributes) => {
  try {
    const users = await user.create(playerNames);

    const deck = new Deck({
      cards,
      attributes,
      players: users
    });

    return await deck.save((err, newDeck) => {
      if (err) console.log(err);
      console.log('RESULT', newDeck);
    });
  } catch (err) {
    console.log(err);
  }
};

/services/user.js

exports.create = async (users) => {
  if (users.constructor === String) {
    const user = new User({displayname: users});

    return await user.save((err, newUser) => {
      if (err) console.log(err);
      console.log('NEW USERS ', user);

      return newUser;
    });
  } else if (users.constructor === Array) {
    let userList = [];

    await users.forEach(name => {
      const user = new User({displayname: name.toString()});

      return user.save((err, newUser) => {
        if (err) {
          console.log(err);
        } else {
          userList.push(newUser);
          return newUser;
        }
      });
    });
    console.log('NEW USERS ', userList);

    return userList;
  };
};

【问题讨论】:

  • @AvivLo 他是。 Async/Await 是管理 Promise 的一种方式。
  • 对不起,我想说回调。
  • 哦,是的,你是对的。 save 方法似乎没有返回承诺。

标签: node.js mongodb mongoose async-await


【解决方案1】:

我不熟悉你如何处理承诺,

但是forEach不是promise-aware,它就是这样设计的,所以它不能正确处理你的asynchronous代码

将其替换为普通的for循环或for-of循环,并在user.save()方法前添加await关键字

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2017-10-21
    相关资源
    最近更新 更多