簡體   English   中英

異步/等待 NodeJS + ZCCADCDEDB567ABAE643E15DCF0974E503Z 不等待

[英]Async / Await with NodeJS + Mongoose doesn't wait

無法讓異步/等待功能在我的紙牌游戲應用程序中正常工作。

(a) 我得到沒有數據的 201 響應。

(b) 甲板文件似乎是在之后創建的,玩家字段是一個空數組,表明它是在甲板保存到 mongoDB 后完成的

下面是我的代碼。 任何幫助表示贊賞。

路由器.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;
  };
};

我不熟悉你如何處理承諾,

但是forEach不是promise-aware ,這就是它的設計方式,因此它不會正確處理您的asynchronous代碼

將其替換為普通for循環或for-of循環,並在user.save()方法前添加await關鍵字

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM