-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPromise().txt
More file actions
173 lines (79 loc) · 5.84 KB
/
Promise().txt
File metadata and controls
173 lines (79 loc) · 5.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
Promise
Promise 객체는 비동기 작업이 맞이할 미래의 완료 또는 실패와 그 결과 값을 나타냅니다.
설명
Promise는 프로미스가 생성된 시점에는 알려지지 않았을 수도 있는 값을 위한 대리자로,
비동기 연산이 종료된 이후에 결과 값과 실패 사유를 처리하기 위한 처리기를 연결할 수 있습니다.
프로미스를 사용하면 비동기 메서드에서 마치 동기 메서드처럼 값을 반환할 수 있습니다.
다만 최종 결과를 반환하는 것이 아니고, 미래의 어떤 시점에 결과를 제공하겠다는 '약속'(프로미스)
을 반환합니다.
Promise는 다음 중 하나의 상태를 가집니다.
대기(pending): 이행하지도, 거부하지도 않은 초기 상태.
이행(fulfilled): 연산이 성공적으로 완료됨.
거부(rejected): 연산이 실패함.
대기 중인 프로미스는 값과 함께 이행할 수도, 어떤 이유(오류)로 인해 거부될 수도 있습니다.
이행이나 거부될 때, 프로미스의 then 메서드에 의해 대기열(큐)에 추가된 처리기들이 호출됩니다.
이미 이행했거나 거부된 프로미스에 처리기를 연결해도 호출되므로,
비동기 연산과 처리기 연결 사이에 경합 조건은 없습니다.
Promise.prototype.then() 및 Promise.prototype.catch() (en-US) 메서드의 반환 값은
새로운 프로미스이므로 서로 연결할 수 있습니다.
생성자
Promise()
새로운 Promise 객체를 생성합니다. 주로 프로미스를 지원하지 않는 함수를 감쌀 때 사용합니다.
정적 메서드
Promise.all(iterable)
주어진 모든 프로미스가 이행되거나, 한 프로미스가 거부될 때까지 대기하는
새로운 프로미스를 반환합니다.
반환하는 프로미스가 이행된다면, 매개변수로 제공한 프로미스 각각의 이행 값을 모두 모아놓은
배열로 이행합니다. 배열 요소의 순서는 매개변수에 지정한 프로미스의 순서를 유지합니다.
반환하는 프로미스가 거부된다면, 매개변수의 프로미스 중 거부된 첫 프로미스의 사유를 그대로
사용합니다.
Promise.allSettled(iterable)
주어진 모든 프로미스가 처리(이행 또는 거부)될 때까지 대기하는 새로운 프로미스를 반환합니다.
Promise.allSettled()가 반환하는 프로미스는 매개변수로 제공한 모든 프로미스 각각의 상태와 값
(또는 거부 사유)을 모아놓은 배열로 이행합니다.
Promise.any(iterable) (en-US)
주어진 모든 프로미스 중 하나라도 이행하는 순간, 즉시 그 프로미스의 값으로 이행하는
새로운 프로미스를 반환합니다.
Promise.race(iterable)
주어진 모든 프로미스 중 하나라도 처리될 때까지 대기하는 프로미스를 반환합니다.
반환하는 프로미스가 이행한다면, 매개변수의 프로미스 중 첫 번째로 이행한 프로미스의 값으로
이행합니다.
반환하는 프로미스가 거부된다면, 매개변수의 프로미스 중 거부된 첫 프로미스의 사유를
그대로 사용합니다.
Promise.reject(reason)
주어진 사유로 거부하는 Promise 객체를 반환합니다.
Promise.resolve()
주어진 값으로 이행하는 Promise 객체를 반환합니다.
이때 지정한 값이 then 가능한(then 메서드를 가지는) 값인 경우,
Promise.resolve()가 반환하는 프로미스는 then 메서드를 "따라가서"
자신의 최종 상태를 결정합니다.
그 외의 경우, 반환된 프로미스는 주어진 값으로 이행합니다.
어떤 값이 프로미스인지 아닌지 알 수 없는 경우,
보통 일일히 두 경우를 나눠서 처리하는 대신
Promise.resolve()로 값을 감싸서 항상 프로미스가 되도록 만든 후 작업하는 것이 좋습니다.
인스턴스 메서드
마이크로태스크 안내서를 방문해 프로미스 인스턴스 메서드가 마이크로태스크 큐와 서비스를 이용하는 방법을 알아보세요.
Promise.prototype.catch() (en-US)
프로미스에 거부 처리기 콜백을 추가하고, 콜백이 호출될 경우 그 반환값으로 이행하며
호출되지 않을 경우, 즉 이전 프로미스가 이행하는 경우 이행한 값을 그대로 사용해
이행하는 새로운 프로미스를 반환합니다.
Promise.prototype.then()
프로미스에 이행과 거부 처리기 콜백을 추가하고, 콜백이 호출될 경우 그 반환값으로 이행하며
호출되지 않을 경우(onFulfilled, onRejected 중 상태에 맞는 콜백이 함수가 아닐 경우)
처리된 값과 상태 그대로 처리되는 새로운 프로미스를 반환합니다.
Promise.prototype.finally()
프로미스의 이행과 거부 여부에 상관없이 처리될 경우 항상 호출되는 처리기 콜백을 추가하고,
이행한 값 그대로 이행하는 새로운 프로미스를 반환합니다.
let myFirstPromise = new Promise((resolve, reject) => {
// 우리가 수행한 비동기 작업이 성공한 경우 resolve(...)를 호출하고, 실패한 경우 reject(...)를 호출합니다.
// 이 예제에서는 setTimeout()을 사용해 비동기 코드를 흉내냅니다.
// 실제로는 여기서 XHR이나 HTML5 API를 사용할 것입니다.
setTimeout( function() {
resolve("성공!") // 와! 문제 없음!
}, 250)
})
myFirstPromise.then((successMessage) => {
// successMessage는 위에서 resolve(...) 호출에 제공한 값입니다.
// 문자열이어야 하는 법은 없지만, 위에서 문자열을 줬으니 아마 문자열일 것입니다.
console.log("와! " + successMessage)
});