- ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ํ๋์ ํจํด์ผ๋ก
์ฝ๋ฐฑ ํจ์
๋ฅผ ์ฌ์ฉํ๋ค. - ์ ํต์ ์ธ ์ฝ๋ฐฑ ํจํด์
์ฝ๋ฐฑ ํฌ
๋ก ์ธํด ๊ฐ๋ ์ฑ์ด ๋์๊ณ ๋ฒ๋๊ธฐ ์ฒ๋ฆฌ ์ค ๋ฐ์ํ ์๋ฌ์ ์ฒ๋ฆฌ๊ฐ ๊ณค๋ํ๋ฉฐ ์ฌ๋ฌ ๊ฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ฒ์ ์ฒ๋ฆฌํ๋ ๋ฐ๋ ํ๊ณ๊ฐ ์๋ค. - ES6์์๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ ๋ค๋ฅธ ํจํด์ผ๋ก
ํ๋ก๋ฏธ์ค(Promise)
๋ฅผ ๋์ ํ๋ค. - ํ๋ก๋ฏธ์ค๋ ์ ํต์ ์ธ ์ฝ๋ฐฑ ํจํด์ด ๊ฐ์ง ๋จ์ ์ ๋ณด์ํ์ฌ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์์ ์ ๋ช ํํ๊ฒ ํํํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
๐ ๋๊ธฐ์ ์ฒ๋ฆฌ๋ชจ๋ธ(Synchronous processing model)๊ณผ ๋น๋๊ธฐ์ ์ฒ๋ฆฌ ๋ชจ๋ธ(Asynchronous processing model)
๋๊ธฐ์ ์ฒ๋ฆฌ ๋ชจ๋ธ
์ ์ง๋ ฌ์ ์ผ๋ก ํ์คํฌ๋ฅผ ์ํํ๋ค. ์ฆ, ํ์คํฌ๋ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ฉฐ ์ด๋ค ์์ ์ด ์ํ์ค์ด๋ฉด ๋ค์ ํ์คํฌ๋ ๋๊ธฐํ๋ค.๋น๋๊ธฐ์ ์ฒ๋ฆฌ ๋ชจ๋ธ
์ ๋ณ๋ ฌ์ ์ผ๋ก ํ์คํฌ๋ฅผ ์ํํ๋ค. ์ฆ, ํ์คํฌ๊ฐ ์ข ๋ฃ๋์ง ์์ ์ํ๋ผ ํ๋๋ผ๋ ๋๊ธฐํ์ง ์๊ณ ์ฆ์ ๋ค์ ํ์คํฌ๋ฅผ ์ํํ๋ค.- ์๋ฐ์คํฌ๋ฆฝํธ์ ๋๋ถ๋ถ์ DOM ์ด๋ฒคํธ์ Timer ํจ์(setTimeout, setInterval), Ajax ์์ฒญ์ ๋น๋๊ธฐ์ ์ฒ๋ฆฌ ๋ชจ๋ธ๋ก ๋์ํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋น๋๊ธฐ์ ์ฒ๋ฆฌ ๋ชจ๋ธ์ ์์ฒญ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ์ฌ ๋ค๋ฅธ ์์ฒญ์ด
๋ธ๋กํน(์์ ์ค๋จ)
๋์ง ์๋ ์ฅ์ ์ด ์๋ค. - ํ์ง๋ง, ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ฝ๋ฐฑ ํจํด์ ์ฌ์ฉํ๋ฉด ์ฒ๋ฆฌ ์์๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด ์ฌ๋ฌ ๊ฐ์ ์ฝ๋ฐฑ ํจ์๊ฐ
๋ค์คํ (nesting, ์ค์ฒฉ)
๋์ด ๋ณต์ก๋๊ฐ ๋์์ง๋์ฝ๋ฐฑ ํฌ(Callback hell
) ์ด ๋ฐ์ํ๋ค๋ ๋จ์ ์ด ์๋ค. - ์ฝ๋ฐฑ ํฌ์ ๊ฐ๋ ์ฑ์ ๋์๊ฒ ํ๋ฉฐ ์ค์๋ฅผ ์ ๋ฐํ๋ ์์ด์ด ๋๋ค.
- ๋ฐ์ ์ฝ๋๋ ์ฝ๋ฐฑ ํฌ์ ์์ ์ด๋ค.
step1(function (value1) {
step2(value1, function (value2) {
step3(value2, function (value3) {
step4(value3, function (value4) {
step5(value4, function (value5) {
// value5๋ฅผ ์ฌ์ฉํ๋ ์ฒ๋ฆฌ
});
});
});
});
});
- ํ๋ก๋ฏธ์ค๋
Promise ์์ฑ์ ํจ์
๋ฅผ ํตํด์ธ์คํด์คํ
ํ๋ค. - Promise ์์ฑ์ ํจ์๋ ๋น๋๊ธฐ ์์
์ ์ํํ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ธ์๋ก ์ ๋ฌ๋ฐ๋๋ฐ ์ด ์ฝ๋ฐฑ ํจ์๋
resolve
์reject
ํจ์๋ฅผ ์ธ์๋ก ์ ๋ฌ๋ฐ๋๋ค.
// Promise ๊ฐ์ฒด์ ์์ฑ
const promise = new Promise((resolve, reject) => {
// ๋น๋๊ธฐ ์์
์ ์ํํ๋ค.
if (/* ๋น๋๊ธฐ ์์
์ํ ์ฑ๊ณต */) {
resolve('result');
}
else { /* ๋น๋๊ธฐ ์์
์ํ ์คํจ */
reject('failure reason');
}
});
- Promise๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ
์ฑ๊ณต(fullfilled)
ํ์๋์ง, ๋๋์คํจ(rejected)
ํ์๋์ง ๋ฑ์์ํ(state)
์ ๋ณด๋ฅผ ๊ฐ๋๋ค. - Promise ์ํ ์ ๋ณด
- Promise ์์ฑ์ ํจ์๊ฐ ์ธ์๋ก ์ ๋ฌ ๋ฐ์ ์ฝ๋ฐฑ ํจ์๋ ๋ด๋ถ์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์์ ์ ์ํํ๋ค.
- ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์ฑ๊ณตํ๋ฉด ์ฝ๋ฐฑ ํจ์์ ์ธ์๋ก ์ ๋ฌ๋ฐ์
resolve
ํจ์๋ฅผ ํธ์ถํ๋ค. ์ด๋ Promise๋fullfilled
์ํ๊ฐ ๋๋ค. - ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์คํจํ๋ฉด
reject
ํจ์๋ฅผ ํธ์ถํ๋ค. ์ด๋ Promise๋rejected
์ํ๊ฐ ๋๋ค.
const promiseAjax = (method, url, payload) => {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open(method, url);
xhr.setRequestHeader("Content-type", "application/json");
xhr.send(JSON.stringify(payload));
xhr.onreadystatechange = function () {
// ์๋ฒ ์๋ต ์๋ฃ๊ฐ ์๋๋ฉด ๋ฌด์
if (xhr.readyState !== XMLHttpRequest.DONE) return;
if (xhr.status >= 200 && xhr.status < 400) {
// resolve ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌ
resolve(xhr.response); // Success!
} else {
// reject ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด์ ์๋ฌ ๋ฉ์์ง๋ฅผ ์ ๋ฌ
reject(new Error(xhr.status)); // Failed...
}
};
});
};
- ์์ ์์ ๋ ๋น๋๊ธฐ ํจ์ ๋ด์์ Promise ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ทธ ๋ด๋ถ์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ์๋ค.
- ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์ฑ๊ณตํ๋ฉด
resolve
๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. ์ด๋ resolve ๋ฉ์๋์ ์ธ์๋ก๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ
๋ฅผ ์ ๋ฌํ๋ค. - ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์คํจํ๋ฉด
reject
๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. ์ด๋ reject ๋ฉ์๋์ ์ธ์๋ก์๋ฌ ๋ฉ์์ง
๋ฅผ ์ ๋ฌํ๋ค. - ์ถ๊ฐ์ ์ผ๋ก ์์ ์์ ์์ XMLHttpRequest์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๊ฐ๋จํ๊ฒ ์์๋ณด๋ฉด
- .open(method, url, async, username, passowrd): HTTP ์์ฒญ์ ๋ํ ์์ฑ์ ์ง์ ํ๋ค.
1. method: ํ๋ผ๋ฏธํฐ ์ ์ก ๋ฐฉ๋ฒ์ ์ง์ , "GET" ๋๋ "POST"๋ก ์ง์ ํ ์ ์๋ค.
2. url: HTTP ์์ฒญ์ ๋ณด๋ผ ์๊ฒฉ ํ์ด์ง์ ์ฃผ์.
3. async: ์์ฒญ์ ๋๊ธฐ, ๋น๋๊ธฐ ์ฒ๋ฆฌํ ์ง์ ์ฌ๋ถ true์ด๋ฉด ๋น๋๊ธฐ์ฒ๋ฆฌ, false๋ฉด ๋๊ธฐ๋ก ์ฒ๋ฆฌ(์๋ต ๊ฐ๋ฅ)
4. username, password: http ์์ฒญ์ ๋ํ ์ธ์ฆ์ด ํ์ํ ๊ฒฝ์ฐ ์ง์ ํ ์ ์๋ ๊ณ์ ์ ๋ณด(์๋ต ๊ฐ๋ฅ)
- .send(content): open์ ์ง์ ํ ์์ฑ์ ์ด์ฉํ์ฌ HTTP ์์ฒญ์ ์ ์กํ๋ค.
1. content: HTTP ์์ฒญ๊ณผ ํจ๊ป ์ ์กํ ํ๋ผ๋ฏธํฐ ๋๋ ์ฝํ
์ธ ์ด๋ค.
- .setRequestHeader(key,value) : key/value ์์ HTTP ํค๋๋ฅผ ์ ์ก ๋ชฉ๋ก์ ๋ํฉ๋๋ค.
- .onreadystatechange: HTTP์์ฒญ์ ์ํ ๋ณํ์ ๋ฐ๋ผ ํธ์ถ๋๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ์
๋๋ค.
1. 0 (UNSENT) : XMLHttpRequest ๊ฐ์ฒด๊ฐ ์์ฑ๋จ.
2. 1 (OPENED) : open() ๋ฉ์๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋จ.
3. 2 (HEADERS_RECEIVED) : HTTP ์์ฒญ์ ๋ณด๋ด์ด ์ฒ๋ฆฌํ๊ณ ์๋ ์ค. ํค๋๋ ์ฝ์ ์ ์๋ ์ํ.
4. 3 (LOADING) : ์์ฒญํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ ์ค์.
5. 4 (DONE) : ์์ฒญํ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋์ด ์๋ตํ ์ค๋น๊ฐ ์๋ฃ๋จ. ๋น๋ก์ responseText ์ responseXML ์์ฑ์ ์ฝ์ ์ ์๋ ์ํ.
- .responseText : ์์ฒญ์ ๋ํ ์๋ต์ ํ
์คํธ๋ก ๋ฐํํฉ๋๋ค.
- .responseXML : ์ฐ๊ฒฐ์ ๋ํ ์๋ต์ XML DOM ์ผ๋ก ๋ณํํฉ๋๋ค. XML ๋ฌธ์์ด์ด ์๋๋ผ XML DOM์ผ๋ก ๋ฐํํ๋ค๋ ๊ฒ์ ์ผ๋ํด ๋์ธ์.
- .status : HTTP ์ํ ์ฝ๋๋ฅผ ์ซ์๋ก ๋ฐํํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด OK์ ๋ํด์ 200์, ํ์ด์ง๋ฅผ ์ฐพ์์ ์์์ ๋๋ 404๋ฅผ ๋ฐํํฉ๋๋ค.
- .statusText : HTTP ์ํ ์ฝ๋์ ๋ํ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด "OK", "Not Found" ๋ฑ์ด ๋ ์ ์์ต๋๋ค.
- Promise๋ก ๊ตฌํ๋ ๋น๋๊ธฐ ํจ์๋
Promise ๊ฐ์ฒด
๋ฅผ ๋ฐํํ์ฌ์ผ ํ๋ค. - Promise๋ก ๊ตฌํ๋
๋น๋๊ธฐ ํจ์๋ฅผ ํธ์ถํ๋ ์ธก(Promise consumer)
์์๋ Promise ๊ฐ์ฒด์ํ์ ์ฒ๋ฆฌ ๋ฉ์๋(then, catch)
๋ฅผ ํตํด ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋๋ ์๋ฌ ๋ฉ์์ง๋ฅผ ์ ๋ฌ๋ฐ์ ์ฒ๋ฆฌํ๋ค. - Promise ๊ฐ์ฒด๋ ์ํ๋ฅผ ๊ฐ๋ ๋ค๊ณ ํ์๋ค.
(fullfilled, rejected ๋ฑ)
์ด ์ํ์ ๋ฐ๋ผ ํ์ ์ฒ๋ฆฌ ๋ฉ์๋๋ฅผ์ฒด์ด๋ ๋ฐฉ์
์ผ๋ก ํธ์ถํ๋ค.
- then ๋ฉ์๋๋ ๋ ๊ฐ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๋๋ค.
- ์ฒซ ๋ฒ์งธ ์ฝ๋ฐฑ ํจ์๋
์ฑ๊ณต(fullfilled, resolve ํจ์๊ฐ ํธ์ถ๋ ์ํ)
์ ํธ์ถ๋๋ค. - ๋ ๋ฒ์งธ ์ฝ๋ฐฑ ํจ์๋
์คํจ(rejected, reject ํจ์๊ฐ ํธ์ถ๋ ์ํ)
์ ํธ์ถ๋๋ค.
์์ธ(๋น๋๊ธฐ ์ฒ๋ฆฌ์์ ๋ฐ์ํ ์๋ฌ์ then ๋ฉ์๋์์ ๋ฐ์ํ ์๋ฌ)
๊ฐ ๋ฐ์ํ๋ฉด ํธ์ถ๋๋ค.- catch ๋ฉ์๋๋ Promise๋ฅผ ๋ฐํํ๋ค.
promiseAjax("GET", "http://jsonplaceholder.typicode.com/posts/1")
.then(JSON.parse)
.then(
// ์ฒซ ๋ฒ์งธ ์ฝ๋ฐฑ ํจ์๋ ์ฑ๊ณต(fulfilled, resolve ํจ์๊ฐ ํธ์ถ๋ ์ํ) ์ ํธ์ถ๋๋ค.
render,
// ๋ ๋ฒ์งธ ํจ์๋ ์คํจ(rejected, reject ํจ์๊ฐ ํธ์ถ๋ ์ํ) ์ ํธ์ถ๋๋ค.
console.error
);
- ์์ ์์ ์์ promiseAjax์
Promise ๊ฐ์ฒด
๋ฅผ ๋ฐํํ๋ค. - Promise ๊ฐ์ฒด์
ํ์ ๋ฉ์๋(then, catch)
๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ์ ๋ํ ํ์ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค.
- ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ์ ๋ํ ํ์ ์ฒ๋ฆฌ๋ Promise ๊ฐ์ฒด๊ฐ ์ ๊ณตํ๋
ํ์ ์ฒ๋ฆฌ ๋ฉ์๋(then, catch, finally)
๋ฅผ ์ฌ์ฉํ์ฌ ์ํํ๋ค๊ณ ๋งํ๋ค. - ๋น๋๊ธฐ ์ฒ๋ฆฌ ์์ ๋ฐ์ํ ์๋ฌ๋
then ๋ฉ์๋
์๋ ๋ฒ์งธ ์ฝ๋ฐฑ ํจ์
๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
const wrongUrl = "https://jsonplaceholder.typicode.com/XXX/1";
// ๋ ๋ฒ์งธ ์ฝ๋ฐฑ ํจ์๋ ์ฒซ ๋ฒ์งธ ์ฝ๋ฐฑ ํจ์์์ ๋ฐ์ํ ์๋ฌ๋ฅผ ์บ์นํ์ง ๋ชปํ๋ค.
promiseAjax("https://jsonplaceholder.typicode.com/todos/1").then(
(res) => console.xxx(res),
(err) => console.error(err)
);
- ํ์ง๋ง, then์ ๋ ๋ฒ์งธ ์ฝ๋ฐฑ ํจ์๋ ์ฒซ ๋ฒ์งธ ์ฝ๋ฐฑ ํจ์์์ ๋ฐ์ํ ์๋ฌ๋ฅผ ์บ์น ๋ชปํ๊ณ , ์ฝ๋๊ฐ ๋ณต์กํด์ ธ์ ๊ฐ๋ ์ฑ์ ์ข์ง ์๋ค!
promiseAjax("https://jsonplaceholder.typicode.com/todos/1")
.then((res) => console.xxx(res))
.catch((err) => console.error(err)); // TypeError: console.xxx is not a function
- catch ๋ฉ์๋๋ฅผ
๋ชจ๋ then๋ฉ์๋๋ฅผ ํธ์ถํ ์ดํ
์ ํธ์ถํ๋ค๋ฉด,๋น๋๊ธฐ ์ฒ๋ฆฌ์์ ๋ฐ์ํ๋ ์๋ฌ(rejectํจ์๊ฐ ํธ์ถ๋ ์ํ)
๋ฟ๋ง ์๋๋ผthen ๋ฉ์๋ ๋ด๋ถ์์ ๋ฐ์ํ ์๋ฌ
๊น์ง ๋ชจ๋ ์บ์นํ ์ ์๋ค. - ๋ํ, catch ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋
์ฑ์ด ์ข๊ณ ๋ช
ํํ๋ค. ๋ฐ๋ผ์ ์๋ฌ ์ฒ๋ฆฌ๋ then ๋ฉ์๋์์ ํ์ง ๋ง๊ณ
catch ๋ฉ์๋
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
- ๋น๋๊ธฐ ํจ์์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ๋ค๋ฅธ ๋น๋๊ธฐ ํจ์๋ฅผ ํธ์ถํด์ผ ํ๋ ๊ฒฝ์ฐ, ํจ์์ ํธ์ถ์ด
์ค์ฒฉ(๋ค์คํ , nesting)
๋์ด ๋ณต์ก๋๊ฐ ๋์์ง๋์ฝ๋ฐฑ ํฌ
์ด ๋ฐ์ํ๋ค. - ํ๋ก๋ฏธ์ค๋ ํ์ ์ฒ๋ฆฌ ๋ฉ์๋๋ฅผ
์ฒด์ด๋(chainning)
ํ์ฌ ์ฌ๋ฌ ๊ฐ์ ํ๋ก๋ฏธ์ค๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ฅผ ํตํด ์ฝ๋ฐฑ ํฌ์ ํด๊ฒฐํ๋ค. - Promise ๊ฐ์ฒด๋ฅผ ๋ฐํํ ๋น๋๊ธฐ ํจ์๋ ํ๋ก๋ฏธ์ค ํ์ ์ฒ๋ฆฌ ๋ฉ์๋์ธ
then
์ด๋catch
๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค. - ๋ฐ๋ผ์, then ๋ฉ์๋๊ฐ Promise ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋๋ก ํ๋ฉด(then ๋ฉ์๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก Promise๋ฅผ ๋ฐํํ๋ค.)
์ฌ๋ฌ ๊ฐ์ ํ๋ก๋ฏธ์ค๋ฅผ ์ฐ๊ฒฐ
ํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
const url = "http://jsonplaceholder.typicode.com/posts";
// ํฌ์คํธ id๊ฐ 1์ธ ํฌ์คํธ๋ฅผ ๊ฒ์ํ๊ณ ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋ค.
promiseAjax("GET", `${url}/1`)
// ํฌ์คํธ id๊ฐ 1์ธ ํฌ์คํธ๋ฅผ ์์ฑํ ์ฌ์ฉ์์ ์์ด๋๋ก ์์ฑ๋ ๋ชจ๋ ํฌ์คํธ๋ฅผ ๊ฒ์ํ๊ณ ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋ค.
.then((res) => promiseAjax("GET", `${url}?userId=${JSON.parse(res).userId}`))
.then(JSON.parse)
.then(render)
.catch(console.error);
- ์ฌ๋ฌ๊ฐ์ ๋น๋๊ธฐ ์์
๋ค์ด ์กด์ฌํ๊ณ ์ด๋ค์ด ๋ชจ๋ ์๋ฃ๋์์ ๋, ์์
์ ์งํํ๊ณ ์ถ๋ค๋ฉด
Promise.all
์ ํ์ฉํ๋ฉด ๋๋ค. Promise.all
๋ฉ์๋๋ Promise๊ฐ ๋ด๊ฒจ ์๋ ๋ฐฐ์ด ๋ฑ์์ดํฐ๋ฌ๋ธ
์ ์ธ์๋ก ์ ๋ฌ ๋ฐ๋๋ค.- ์ ๋ฌ๋ฐ์ ๋ชจ๋ ํ๋ก๋ฏธ์ค๋ฅผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๊ณ ๊ทธ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ resolveํ๋ ์๋ก์ด ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋ค.
Promise.all([
new Promise((resolve) => setTimeout(() => resolve(1), 3000)), // 1
new Promise((resolve) => setTimeout(() => resolve(2), 2000)), // 2
new Promise((resolve) => setTimeout(() => resolve(3), 1000)), // 3
])
.then(console.log) // [ 1, 2, 3 ]
.catch(console.log);
- ์์ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด
๋ชจ๋ Promise์ ์ฒ๋ฆฌ๊ฐ ์ฑ๊ณต
ํ๋ฉด ๊ฐ๊ฐ์ ํ๋ก๋ฏธ์ค๊ฐ resolveํ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ๋ฐฐ์ด
์ ๋ด์ resolveํ๋์๋ก์ด ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํ
ํ๋ค. - ์ด๋, ์ฒซ๋ฒ์งธ ํ๋ก๋ฏธ์ค๊ฐ ๊ฐ์ฅ ๋์ค์ ์ฒ๋ฆฌ๋๋๋ผ๋ Promise.all ๋ฉ์๋๊ฐ ๋ฐํํ๋ ํ๋ก๋ฏธ์ค๋ ์ฒซ๋ฒ์งธ ํ๋ก๋ฏธ์ค๊ฐ resolveํ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ถํฐ ์ฐจ๋ก๋๋ก ๋ฐฐ์ด์ ๋ด๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐฐ์ด์ resolveํ๋ ์๋ก์ด ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋ค. ์ฆ,
์ฒ๋ฆฌ ์์๊ฐ ๋ณด์ฅ๋๋ค.
https://babtingdev.tistory.com/45 https://poiemaweb.com/es6-promise https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise https://ko.javascript.info/promise-basics