![](/img/trans.png)
[英]nodejs, async in reduce, await doesn't wait for promise resolve
[英]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.