Skip to content

Commit d7fd76c

Browse files
프라미스 기초 fix typos
1 parent 41b24a4 commit d7fd76c

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

1-js/11-async/02-promise-basics/article.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
# 프라미스
22

3-
본인을 아주 유명한 가수라고 가정해 봅시다. 그리고 탑 가수인 본인이 밤·낮으로 다음 싱글 앨범이 언제 나오는지 물어보는 팬들을 상대해야 한다고 해 봅시다.
3+
본인을 아주 유명한 가수라고 가정해 봅시다. 그리고 탑 가수인 본인이 밤, 낮으로 다음 싱글 앨범이 언제 나오는지 물어보는 팬들을 상대해야 한다고 해 봅시다.
44

5-
가수는 앨범이 출시되면 팬들이 자동으로 소식을 받아볼 수 있도록 해 부하를 덜 겁니다. 구독 리스트를 하나 만들어 팬들에게 전달해 이메일 주소를 적게 하고, 앨범이 준비되면 리스트에 있는 팬들에게 메일을 보내 앨범 관련 소식을 바로 받아볼 수 있게 하면 되죠. 이렇게 해 놓으면 녹음 스튜디오에 화재가 발생해서 출시 예정인 앨범이 취소되는 불상사가 발생해도 관련 소식을 팬들에게 전달 할 수 있습니다.
5+
당신은 앨범이 출시되면 팬들이 자동으로 소식을 받아볼 수 있도록 해 부하를 덜 겁니다. 구독 리스트를 하나 만들어 팬들에게 전달해 이메일 주소를 적게 하고, 앨범이 준비되면 리스트에 있는 팬들에게 메일을 보내 앨범 관련 소식을 바로 받아볼 수 있게 하는 식으로 말이죠. 이렇게 하면 녹음 스튜디오에 화재가 발생해서 출시 예정인 앨범이 취소되는 불상사가 발생해도 관련 소식을 팬들에게 전달 할 수 있습니다.
66

77
이제 모두가 행복해졌습니다. 밤낮으로 질문을 하는 팬이 사라졌고, 팬들은 앨범 출시를 놓치지 않을 수 있게 되었으니까요.
88

9-
이 비유는 코드를 작성하면서 자주 만나게 되는 상황을 실제 일어날 법한 일로 바꾼 것입니다. 바로 아래 같은 상황 말이죠.
9+
이 비유는 코드를 작성하면서 자주 만나는 상황을 실제 일어날 법한 일로 바꾼 것입니다. 바로 아래 같은 상황 말이죠.
1010

1111
1. '제작 코드(producing code)'는 원격에서 스크립트를 불러오는 것 같은 시간이 걸리는 일을 합니다. 위 비유에선 '가수'가 제작 코드에 해당합니다.
1212
2. '소비 코드(consuming code)'는 '제작 코드'의 결과를 기다렸다가 이를 소비합니다. 이때 소비 주체(함수)는 여럿이 될 수 있습니다. 위 비유에서 소비 코드는 '팬'입니다.
1313
3. *프라미스(promise)* 는 '제작 코드'와 '소비 코드'를 연결해 주는 특별한 자바스크립트 객체입니다. 위 비유에서 프라미스는 '구독 리스트'입니다. '프라미스'는 시간이 얼마나 걸리든 상관없이 약속한 결과를 만들어 내는 '제작 코드'가 준비되었을 때, 모든 소비 코드가 결과를 사용할 수 있도록 해줍니다.
1414

15-
사실 프라미스는 비유에서 사용된 구독 리스트보다 훨씬 복잡하기 때문에, 비유가 완벽하게 들어맞지는 않습니다. 프라미스엔 또 다른 기능도 있고, 한계도 있습니다. 하지만 일단 이 비유를 이용해 프라미스를 학습해보도록 합시다.
15+
사실 프라미스는 구독 리스트보다 훨씬 복잡하기 때문에, 비유가 완벽하게 들어맞지는 않습니다. 프라미스엔 더 많은 기능이 있고, 한계도 있습니다. 하지만 일단 이 비유를 이용해 프라미스를 학습해보도록 합시다.
1616

1717
`promise` 객체는 아래와 같은 문법으로 만들 수 있습니다.
1818

@@ -24,19 +24,19 @@ let promise = new Promise(function(resolve, reject) {
2424

2525
`new Promise`에 전달되는 함수는 *executor(실행자, 실행 함수)* 라고 부릅니다. executor는 `new Promise`가 만들어질 때 자동으로 실행되는데, 결과를 최종적으로 만들어내는 제작 코드를 포함합니다. 위 비유에서 '가수'가 바로 executor입니다.
2626

27-
executor의 인수 `resolve``reject`자바스크립트가 자체적으로 제공하는 콜백입니다. 개발자는 `resolve``reject`를 신경 쓰지 않고 executor 안 코드만 작성하면 됩니다.
27+
executor의 인수 `resolve``reject`자바스크립트에서 자체 제공하는 콜백입니다. 개발자는 `resolve``reject`를 신경 쓰지 않고 executor 안 코드만 작성하면 됩니다.
2828

29-
대신 executor에선 결과를 즉시 얻든, 늦게 얻든 상관없이 상황에 따라 인수로 넘겨준 콜백 중 하나를 반드시 호출해야 합니다.
29+
대신 executor에선 결과를 즉시 얻든 늦게 얻든 상관없이 상황에 따라 인수로 넘겨준 콜백 중 하나를 반드시 호출해야 합니다.
3030

31-
- `resolve(value)` — 일이 성공적으로 끝난 경우, 그 결과를 나타내는 `value`와 함께 호출
31+
- `resolve(value)` — 일이 성공적으로 끝난 경우 그 결과를 나타내는 `value`와 함께 호출
3232
- `reject(error)` — 에러 발생 시 에러 객체를 나타내는 `error`와 함께 호출
3333

3434
요약하면 다음과 같습니다. executor는 자동으로 실행되는데 여기서 원하는 일이 처리됩니다. 처리가 끝나면 executor는 처리 성공 여부에 따라 `resolve``reject`를 호출합니다.
3535

3636
한편, `new Promise` 생성자가 반환하는 `promise` 객체는 다음과 같은 내부 프로퍼티를 갖습니다.
3737

3838
- `state` — 처음엔 `"pending"`(보류)이었다 `resolve`가 호출되면 `"fulfilled"`, `reject`가 호출되면 `"rejected"`로 변합니다.
39-
- `result` — 처음엔 `undefined`이었다, `resolve(value)`가 호출되면 `value`로, `reject(error)`가 호출되면 `error`로 변합니다.
39+
- `result` — 처음엔 `undefined`이었다 `resolve(value)`가 호출되면 `value`로, `reject(error)`가 호출되면 `error`로 변합니다.
4040

4141
따라서 executor는 아래 그림과 같이 `promise`의 상태를 둘 중 하나로 변화시킵니다.
4242

@@ -50,7 +50,7 @@ executor의 인수 `resolve`와 `reject`는 자바스크립트가 자체적으
5050
let promise = new Promise(function(resolve, reject) {
5151
// 프라미스가 만들어지면 executor 함수는 자동으로 실행됩니다.
5252

53-
// 1초 뒤에 일이 성공적으로 끝났다는 신호가 전달되면서 result가 'done'이 됩니다.
53+
// 1초 뒤에 일이 성공적으로 끝났다는 신호가 전달되면서 result는 'done'이 됩니다.
5454
setTimeout(() => *!*resolve("done")*/!*, 1000);
5555
});
5656
```
@@ -81,7 +81,7 @@ let promise = new Promise(function(resolve, reject) {
8181

8282
지금까지 배운 내용을 요약해 봅시다. executor는 보통 시간이 걸리는 일을 수행합니다. 일이 끝나면 `resolve``reject` 함수를 호출하는데, 이때 프라미스 객체의 상태가 변화합니다.
8383

84-
이행(resolved)되거나 거부(rejected) 상태의 프라미스는 '처리된(settled)' 프라미스라고 부릅니다. 반대되는 프라미스로 '대기(pending)'상태의 프라미스가 있습니다.
84+
이행(resolved) 혹은 거부(rejected) 상태의 프라미스는 '처리된(settled)' 프라미스라고 부릅니다. 반대되는 프라미스로 '대기(pending)'상태의 프라미스가 있습니다.
8585

8686
````smart header="프라미스는 성공 또는 실패만 합니다."
8787
executor는 `resolve`나 `reject` 중 하나를 반드시 호출해야 합니다. 이때 변경된 상태는 더 이상 변하지 않습니다.
@@ -101,15 +101,15 @@ let promise = new Promise(function(resolve, reject) {
101101
102102
이렇게 executor에 의해 처리가 끝난 일은 결과 혹은 에러만 가질 수 있습니다.
103103
104-
여기에 더하여, `resolve`나 `reject`는 인수를 하나만 받고(혹은 아무것도 받지 않음) 그 이외의 인수는 무시한다는 특성도 있습니다.
104+
여기에 더하여 `resolve`나 `reject`는 인수를 하나만 받고(혹은 아무것도 받지 않음) 그 이외의 인수는 무시한다는 특성도 있습니다.
105105
````
106106

107107
```smart header="`Error` 객체와 함께 거부하기"
108108
무언가 잘못된 경우, executor는 `reject`를 호출해야 합니다. 이때 인수는 `resolve`와 마찬가지로 어떤 타입도 가능하지만 `Error` 객체 또는 `Error`를 상속받은 객체를 사용할 것을 추천합니다. 이유는 뒤에서 설명하겠습니다.
109109
```
110110
111111
````smart header="`resolve`·`reject` 함수 즉시 호출하기"
112-
executor는 대개 무언가를 비동기적으로 수행하고, 약간의 시간이 지난 후에 `resolve`/`reject`를 호출하는데, 꼭 이렇게 할 필요는 없습니다. 아래와 같이 `resolve`나 `reject`를 즉시 호출할 수도 있습니다.
112+
executor는 대개 무언가를 비동기적으로 수행하고, 약간의 시간이 지난 후에 `resolve`, `reject`를 호출하는데, 꼭 이렇게 할 필요는 없습니다. 아래와 같이 `resolve`나 `reject`를 즉시 호출할 수도 있습니다.
113113
114114
```js
115115
let promise = new Promise(function(resolve, reject) {
@@ -218,13 +218,13 @@ promise.catch(alert); // 1초 뒤 "Error: 에러 발생!" 출력
218218
219219
프라미스가 처리되면(이행이나 거부) `f`가 항상 실행된다는 점에서 `.finally(f)` 호출은 `.then(f, f)`과 유사합니다.
220220
221-
쓸모가 없어진 로딩 인디케이터(loading indicators)를 멈추는 경우같이, 결과가 어떻든 마무리가 필요하면 `finally`가 유용합니다.
221+
쓸모가 없어진 로딩 인디케이터(loading indicator)를 멈추는 경우같이, 결과가 어떻든 마무리가 필요하면 `finally`가 유용합니다.
222222
223223
사용법은 아래와 같습니다.
224224
225225
```js
226226
new Promise((resolve, reject) => {
227-
/* 시간이 걸리는 어떤 일을 수행하고, 그 후 resolve·reject를 호출함 */
227+
/* 시간이 걸리는 어떤 일을 수행하고, 그 후 resolve, reject를 호출함 */
228228
})
229229
*!*
230230
// 성공·실패 여부와 상관없이 프라미스가 처리되면 실행됨
@@ -273,12 +273,12 @@ let promise = new Promise(resolve => resolve("완료!"));
273273
promise.then(alert); // 완료! (바로 출력됨)
274274
```
275275
276-
가수와 팬, 구독리스트 시나리오보다 프라미스가 더 복잡하다고 말한 이유가 바로 이런 기능 때문입니다. 가수가 신곡을 발표한 이후에 구독 리스트에 이름을 올리는 팬은 신곡 발표 여부를 알 수 없습니다. 구독 리스트에 이름을 올리는 것이 선행되어야 새로운 소식을 받을 수 있죠.
276+
가수와 팬, 구독리스트 시나리오보다 프라미스가 더 복잡하다고 말한 이유가 바로 이런 기능 때문입니다. 가수가 신곡을 발표한 이후에 구독 리스트에 이름을 올리는 팬은 신곡 발표 여부를 알 수 없습니다. 구독 리스트에 이름을 올리는 것이 선행되어야 새로운 소식을 받을 수 있기 때문이죠.
277277
278-
프라미스는 핸들러를 언제든 추가할 수 있다는 점에서 구독리스트 시나리오보다 더 유연합니다. 결과가 나와 있는 상태에서 핸들러를 등록하면 결과를 바로 받을 수 있습니다.
278+
그런데 프라미스는 핸들러를 언제든 추가할 수 있다는 점에서 구독리스트 시나리오보다 더 유연합니다. 결과가 나와 있는 상태에서도 핸들러를 등록하면 결과를 바로 받을 수 있습니다.
279279
````
280280

281-
이제, 실제 동작하는 예시를 보며 프라미스로 어떻게 비동기 동작을 처리하는지 살펴봅시다.
281+
이제 실제 동작하는 예시를 보며 프라미스로 어떻게 비동기 동작을 처리하는지 살펴봅시다.
282282

283283
## 예시: loadScript [#loadscript]
284284

0 commit comments

Comments
 (0)