refactor: 문서 개선 중
This commit is contained in:
+5
-3
@@ -74,11 +74,13 @@ tech-log-frontend : 6e784ed · fd73bc8 · 3bb724b
|
||||
|
||||
거절만 잡는 처리로는 부족하다. 던지는 경로도 함께 잡아야 한 칸의 실패가 화면 전체로 번지지 않는다.
|
||||
|
||||
## 왜 동기적으로 던질 수 있나
|
||||
## 언제 동기적으로 던질 수 있나
|
||||
|
||||
게이트웨이 호출이 비동기 함수여도 그 안의 첫 줄이 동기적으로 실행된다. 인자를 검증하거나 연산을 고르는 코드가 거기 있고, 등록되지 않은 연산을 고르면 거기서 바로 던진다.
|
||||
`async function` 본문에서 던진 예외는 호출자에게 rejected Promise 로 전달된다. 이 경우에는 `Promise.all` 의 rejection 경로로 들어간다.
|
||||
|
||||
그래서 「비동기 함수를 불렀으니 거절로 온다」는 전제가 성립하지 않는다.
|
||||
별도로 봐야 하는 것은 Promise 를 반환하는 API처럼 보이지만 실제 구현이 일반 함수이고, Promise 를 만들기 전에 인자 검증이나 연산 선택 같은 동기 코드가 실행되는 경우다. 그 코드가 throw 하면 함수 호출 자체가 동기적으로 실패해 배열이 완성되지 않고 `Promise.all` 에 도달하지 못한다.
|
||||
|
||||
따라서 이 사건에서 확인할 기준은 「비동기 작업인가」가 아니라 「호출이 Promise 를 반환하기 전에 동기 throw 할 수 있는가」다.
|
||||
|
||||
## 탭에도 같은 판단을
|
||||
|
||||
|
||||
Reference in New Issue
Block a user