[英]Route returns be await function is complete
在下面的代碼中,路由在數組填充之前返回,因此數組返回空值。 我知道我在Promise和/或異步等待中做錯了事,但是我不知道這是什么。
router.get('/:deckId', auth.required, (req, res) => {
Deck.findById(req.params.deckId).then(deck => {
let cardArray = []
deck.cards.forEach(card => {
const url = `https://api.scryfall.com/cards/${card.id}`
getScryFallCard(url).then(a => cardArray.push(a))
})
res.json({
name: deck.name,
id: deck._id,
cards: cardArray
})
})
})
我試圖使所有功能異步,並在子功能旁邊放置等待。 我嘗試過創建一個承諾,在該承諾旁邊等待,然后返回響應。 我試過對貓鼬函數而不是Promise使用回調。 我嘗試了promise,async,await和callback的其他組合,但均未成功。 填充數組后返回響應的正確方法是什么?
這是我得到的回應。 卡密鑰應填充有一系列卡。
{
"name": "Dovin",
"id": "5ca50448232aa920636dd571",
"cards": []
}
router.get('/:deckId', auth.required, (req, res) => {
Deck.findById(req.params.deckId).then(async deck => {
let cardArray = []
for (let card of deck.cards) {
const url = `https://api.scryfall.com/cards/${card.id}`
let a = await getScryFallCard(url)
cardArray.push(a)
}
res.json({
name: deck.name,
id: deck._id,
cards: cardArray
})
})
})
在執行循環中的所有代碼之后,您需要調用res.json
。 await
確保在完成異步作業之前不執行下一行。 因此,在循環內所有調用完成后,將發送響應( res.json
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.