无法在我的纸牌游戏应用中使异步/等待功能正常工作。
(a)我收到没有数据的201响应。
(b)看板文件似乎是在此之后创建的,players字段为空数组,指示在将看板文件保存到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;
};
};
答案 0 :(得分:0)
我不熟悉您如何处理诺言,
但是forEach
不是promise-aware
,这是它的设计方式,因此它将无法正确处理您的asynchronous
代码
用普通的for
循环或for-of
循环替换它,并在await
方法前面添加user.save()
关键字