프로그래밍/알고리즘, 프로그래밍 언어

[JavaScript] async/await을 array.map에 사용 시 Promise { <pending> } 에러

제이콥J 2022. 8. 10. 16:48

array.map 메소드에 async-await을 적용하자 Promise{<pending>}에러가 발생했다.

 

// orderList는 주문 데이터가 담긴 배열

const data = await orderList.map(async (order) => {
  const itemData = await Order_item.findAll({
    where: {
      Order_id: order.id
    }
  })
  const itemList = itemData.map(el => el.dataValues)
  
  order.itemList = itemList
  return order
})

 

원인

async 함수는 Promise를 리턴하기 때문에 발생한 에러이다.

 

map 함수가 호출한 async 함수는 Promise를 리턴한다.

그리고 map 함수는 이 Promise들을 엘리먼트로 하는 배열을 리턴한다.

 

 

해결방법

const data = await Promise.all( orderList.map(async (order) => {
  const itemData = await Order_item.findAll({
    where: {
      Order_id: order.id
    }
  })
  const itemList = itemData.map(el => el.dataValues)
  
  order.itemList = itemList
  return order
}))

 

Promise.all로 감싸주면 해결된다.

Promise.all은 Promise 엘리먼트로 구성된 배열을 받고, Promise를 처리하여 그 결과값을 다시 배열로 리턴한다.

반응형