Skip to content

Commit 2a1258a

Browse files
chore: update cancellation.md - kr translation (#182)
Co-authored-by: Jay <[email protected]>
1 parent 3b43e11 commit 2a1258a

File tree

1 file changed

+90
-2
lines changed

1 file changed

+90
-2
lines changed

posts/kr/cancellation.md

Lines changed: 90 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,66 @@ next_title: 'URL-인코딩 바디'
66
next_link: '/kr/docs/urlencoded'
77
---
88

9-
*취소 토큰*을 이용해 요청을 취소할 수 있습니다.
9+
## 요청 취소
1010

11-
> Axios의 취소 토큰 API는 중단된 [proposal-cancelable-promises](https://github.com/tc39/proposal-cancelable-promises)을 기반으로 하고 있습니다.
11+
axios 호출에서 `timeout` 속성을 설정하면 **응답** 관련 타임아웃을 처리합니다.
12+
13+
몇가지 경우에 (예: 네트워크 연결을 사용할 수 없게 되는 경우 등) axios **연결**을 조기에 취소하는것이 유리합니다. 취소를 하지 않는 경우, axios호출이 부모 코드/스택이 타임아웃 될 때까지 대기할 수 있습니다 (서버 측 응용 프로그램의 경우 몇 분이 걸릴 수 있습니다)
14+
15+
axios 호출을 종료하려면 다음과 같은 방법을 사용할 수 있습니다:
16+
- `signal`
17+
- `cancelToken` (deprecated)
18+
19+
`timeout`과 취소 방법(예: `signal`)을 결합하면 **응답** 관련 타임아웃과 **연결** 관련 타임아웃을 모두 처리할 수 있습니다.
20+
21+
### `signal`: AbortController
22+
23+
Axios는 `v0.22.0` 부터 fetch API의 방식대로 요청을 취소하기 위해 [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController)를 지원합니다:
24+
25+
```js
26+
const controller = new AbortController();
27+
28+
axios.get('/foo/bar', {
29+
signal: controller.signal
30+
}).then(function(response) {
31+
//...
32+
});
33+
// 요청 취소하기
34+
controller.abort()
35+
```
36+
37+
최신 [`AbortSignal.timeout()`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/timeout) API를 사용한 타임아웃 예 [nodejs 17.3+]:
38+
```js
39+
axios.get('/foo/bar', {
40+
signal: AbortSignal.timeout(5000) // 5초 후 요청 중단
41+
}).then(function(response) {
42+
//...
43+
});
44+
```
45+
46+
타임아웃 헬퍼 함수를 사용한 예:
47+
```js
48+
function newAbortSignal(timeoutMs) {
49+
const abortController = new AbortController();
50+
setTimeout(() => abortController.abort(), timeoutMs || 0);
51+
52+
return abortController.signal;
53+
}
54+
55+
axios.get('/foo/bar', {
56+
signal: newAbortSignal(5000) // 5초 후 요청 중단
57+
}).then(function(response) {
58+
//...
59+
});
60+
```
61+
62+
### CancelToken `deprecated`
63+
64+
*CancelToken*을 사용하여 요청을 취소할 수도 있습니다.
65+
66+
> axios cancel token API는 철회된 [cancelable promises proposal](https://github.com/tc39/proposal-cancelable-promises)을 기반으로 합니다.
67+
68+
> 이 API는 `v0.22.0` 부터 deprecated 되었으며 새 프로젝트에서 사용되어서는 안 됩니다.
1269
1370
아래와 같이 `CancelToken.source` 팩토리를 사용하여 취소 토큰을 만들수 있습니다:
1471

@@ -54,3 +111,34 @@ cancel();
54111
```
55112

56113
> 참고: 같은 취소 토큰으로 여러 요청을 취소할 수 있습니다.
114+
115+
전환 기간 동안에는 동일한 요청에 대해서 두가지 취소 API를 모두 사용할 수 있습니다:
116+
117+
```js
118+
const controller = new AbortController();
119+
120+
const CancelToken = axios.CancelToken;
121+
const source = CancelToken.source();
122+
123+
axios.get('/user/12345', {
124+
cancelToken: source.token,
125+
signal: controller.signal
126+
}).catch(function (thrown) {
127+
if (axios.isCancel(thrown)) {
128+
console.log('Request canceled', thrown.message);
129+
} else {
130+
// 에러 핸들링
131+
}
132+
});
133+
134+
axios.post('/user/12345', {
135+
name: 'new name'
136+
}, {
137+
cancelToken: source.token
138+
})
139+
140+
// 요청 취소하기 (메시지 파라미터는 옵션입니다)
141+
source.cancel('Operation canceled by the user.');
142+
// OR
143+
controller.abort(); // 메시지 파라미터 지원하지 않음
144+
```

0 commit comments

Comments
 (0)