簡體   English   中英

路線返回等待功能完成

[英]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.

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