codestates / codestates/withpuppy
[❗️Error] 12/15 (김희원) 서버 테스트할 때 터미널에 `Promise { <pending> }` 이 뜰 경우
- Dominant language
- JavaScript
- Stars
- 0
- Forks
- 3
- PR merge metrics
- No merged PRs in 30d
Description
### 마주친 에러에 대한 설명
- 사실 오늘 할 일들 중 서버 라우팅을 원래 3개였다가 기존 2개를 합쳐야해서 잘 합쳐졌는지 테스트를 보려는데 터미널에는 계속 `Promise { }`만 떠서 애를 먹었다!
### 에러 메세지 상세 내용
```js
Promise { }
Promise { }
Promise { }
Promise { }
```
### 해결하기 위한 노력과 방안
- 그렇다! Promise는 비동기 형식으로 접근으로 해야하는 건 머리로는 이해가 갔다. 문제는 나는 map을 통해서 배열을 계속 돌려야하는데 여기서 어떻게 async, await을 쓰라는 건지 도통 몰라 구글링을 해보았다.
- 다행스럽게도 map이나 reduce 함수에서 async/await을 쓸 방도가 있다고 한다.
- 바로 `Promise.all`이나 `Promise.race`를 사용하면 된다고 한다.
- 둘 다 사용방법은 비슷한데, 블로그에 따르면 약간 다르다 한다.
- 하나라도 reject 시 멈출 때 (**모든 Promise 가 resolve 됐을 때를 보장**하려면) => `Promise.all`
- **resolve / reject 여부 상관없이 가장 먼저 수행된 결과를 받아올 때** => `Promise.race`
- 고마운 구글과 블로그 덕분에 해결했다! 아래는 내가 해결한 코드의 일부분이다!
```js
let dataToSend = Promise.all(
data.map(async (el, idx) => {
let puppy = await Puppy.findOne({
where: { UserId: el.dataValues.UserId },
});
//길어서 생략한다..
}),
).then((data) => {
return res.status(200).json({ message: 'done!', pinpointers, data });
});
```
### 레퍼런스
* [map, reduce 함수에서 async/await 쓰기](https://velog.io/@minsangk/2019-09-06-0209-%EC%9E%91%EC%84%B1%EB%90%A8-eik06xy8mm)
* [node.js 함수 사용시 Promise { } 이 뜰경우](https://okky.kr/article/704616) => 이 분이 나와 같은 문제를 겪었다!
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.