๋ค์ด๊ฐ๊ธฐ์ ์์... ๋ธ๋กํน๊ณผ ๋ ผ๋ธ๋กํน์ ์๋ฟ๊ฒ ์ดํด๊ฐ ๊ฐ๋๋ฐ ๋๊ธฐ์ ๋น๋๊ธฐ๋ ์ดํด๊ฐ ๊ฐ์ง ์์์ ์ ํํ์ง ์์ ์ ๋ณด๋ค์ด ๋ค์ด๊ฐ ์์ ์๋ ์์ต๋๋ค.
๋ธ๋กํน๊ณผ ๋ ผ๋ธ๋กํน & ๋๊ธฐ์ ๋น๋๊ธฐ๋ ์์ ํ ๋ณ๊ฐ์ ๊ฐ๋ ์ด๋ค. ( ์ ์ฌํ ์๋ฏธ๋ฅผ ๊ฐ์ง ๊ฐ๋ ์ธ๊ฑฐ์ง ์๋ก ์ฐ๊ด๊ด๊ณ๋ ์ ํ ์๋ค. )
๊ทธ๋ฅ "๋ธ๋กํน + ๋๊ธฐ" ๋๋ "๋ ผ๋ธ๋กํน + ๋น๋๊ธฐ"๋ฅผ ๊ฐ์ด ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค or ์ฐ๊ด๊ด๊ณ๊ฐ ์๋ค๊ณ ์ฐฉ๊ฐํ๋ ๊ฒ๋ฟ์ด๋ค.
๋ธ๋กํน์ ํธ์ถ๋ ํจ์๊ฐ ์์ ์ด ๋๋ ๋๊น์ง ์ ์ด๊ถ์ ๊ฐ๋ ๊ฒ์ ์๋ฏธ
๋ ผ๋ธ๋กํน์ ์ ์ด๊ถ์ ๋ณธ์ธ์ด ๊ฐ์ง๊ณ ์คํ์ ์์์ ์คํํ๋๋ก ํ๋ ๊ฒ์ ์๋ฏธ
function outer() {
inner1();
inner2();
inner3();
/**
* ๋ง์ฝ ๋ธ๋กํน์ผ ๊ฒฝ์ฐ์ inner1()์ ์คํํ๋ ์ฝ๋๋ฅผ ๋ง๋ ๊ฒฝ์ฐ ์ ์ด๊ถ์ inner1()์ผ๋ก ๋๊ฒจ์ค๋ค.
* ๋ํ inner1()์ด ๋๋ ๋๊น์ง ์ ์ด๊ถ์ ์ป์ง ๋ชปํด์ ๋ค์ ์ฝ๋๋ก ๋์ด๊ฐ ์ ์๋ค. ( ์ฆ, inner2()๋ฅผ ์คํํ ์ ์๋ค. )
*/
/**
* ๋ง์ฝ ๋
ผ๋ธ๋กํน์ผ ๊ฒฝ์ฐ์ ์ ์ด๊ถ์ outer()๊ฐ ๊ณ์ ๊ฐ๊ณ inner1(), inner2(), inner3()์ ์คํ ๊ฒฐ๊ณผ์ ๊ด์ฌํ์ง ์๊ณ ๊ณ์ ๋ค์ ์ฝ๋๋ฅผ ์คํํ๋ค.
*/
}
const inner1 = () => console.log("inner1()");
const inner2 = () => console.log("inner2()");
const inner3 = () => console.log("inner3()");
outer();
๋๊ธฐ๋ ์์ฒญ๊ณผ ์์ฒญ์ ๋ํ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ์๋ฏธ
๋ ผ๋ธ๋กํน์ ์์ฒญ์ ํ๋ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๋ ๊ฒ์ ์๋ฏธ
๋๊ธฐ๋ ์์ ์๋ฃ ์ฌ๋ถ๋ฅผ ์ ๊ฒฝ ์ด๋ค. ( ์ ๊ฒฝ ์ด๋ค => ๊ธฐ๋ค ๋ฆฐ๋ค or ํ์ธํ๋ค )
๋น๋๊ธฐ๋ ์์ ์๋ฃ ์ฌ๋ถ๋ฅผ ์ ๊ฒฝ ์ฐ์ง ์๋๋ค. ( callback()์ผ๋ก ์ฒ๋ฆฌํ๋ค. )
const fs = require('fs');
// ๋น๋๊ธฐ "fs.readFile()"์ ์์ฒญ์ ๋ํ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์ฝ๋๋ฅผ ์คํํ๋ค.
const result1 = fs.readFile("๊ฒฝ๋ก");
console.log("๋ค์ ์คํ");
// ๋๊ธฐ "fs.readFileSync()"์ ์์ฒญ์ ๋ํ ์๋ต์ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ค์ ์ฝ๋๋ฅผ ์คํํ๋ค.
const result2 = fs.readFileSync("๊ฒฝ๋ก");
console.log("๋ค์ ์คํ");
// ๋น๋๊ธฐ๋ ์ด๋ค ์คํ์ ๋ํ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์์ผ๋ฏ๋ก ๋๋ถ๋ถ callbackํจ์๋ฅผ ์ด์ฉํ๋ค.
const callback = () => console.log("์ฝ๋ฐฑ ํจ์ ์คํ");
setTimeout(callback, 1000);
ํจ์ ์ฒ๋ฆฌ๋ฅผ ์์ํ๋ฉด ํจ์์๊ฒ ์ ์ด๊ถ์ ๋๊ฒจ์ฃผ๊ณ ์๋ต์ ๊ธฐ๋ค๋ฆฐ๋ค.
๊ฐ์ฅ ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ธฐ ์ฝ์ง๋ง ์คํํ๋ ํจ์๊ฐ ๋๋ ๋๊น์ง ๋ค๋ฅธ ํ์๋ฅผ ํ์ง ๋ชปํ๋ ๋จ์ ์ด ์๋ค.
const callback = (v) => console.log(v);
// ์๋ ์ฒ๋ผ ์ฝ๋๋ฅผ ์คํํ๋ฉด ๋๊ธฐ์ฒ๋ผ ๋ณด์ด๋๋ก ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค.
// ๋ํ ์คํ ์์๋ฅผ ๋ณด์ฅํ ์ ์๋ค.
(async () => {
// "fetch(1)" => "fetch(2)" => "fetch(3)" ์์๋ก ๋จผ์ ์คํ ํ ๋ค์ ์ฝ๋ ์คํ
// ์ฆ, ์์ฐจ์ ์ผ๋ก ์คํ๋๋ค.
// ํ์ง๋ง ๋จ์ ์ผ๋ก๋ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ ajax ์์ฒญ์์๋ ๋ถ๊ตฌํ๊ณ ํ๋์ ์๋ต์ด ์ฌ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ ์๊ฐ์ ์ธ ์ํด๊ฐ ๋ฐ์ํ๋ค. ( ์๋๊ฐ ๋๋ ค์ง )
await fetch("https://jsonplaceholder.typicode.com/posts/1").then(result => result.json()).then(callback);
await fetch("https://jsonplaceholder.typicode.com/posts/2").then(result => result.json()).then(callback);
await fetch("https://jsonplaceholder.typicode.com/posts/3").then(result => result.json()).then(callback);
console.log("๋ค๋ฅธ ์ฒ๋ฆฌ 1");
console.log("๋ค๋ฅธ ์ฒ๋ฆฌ 2");
console.log("๋ค๋ฅธ ์ฒ๋ฆฌ 3");
})();
// ๊ฒฐ๊ณผ => fetch()์ ๊ฒฐ๊ด๊ฐ 3๊ฐ, ๋ค๋ฅธ ์ฒ๋ฆฌ 1, ๋ค๋ฅธ ์ฒ๋ฆฌ 2, ๋ค๋ฅธ ์ฒ๋ฆฌ 3
ํจ์ ์ฒ๋ฆฌ๋ฅผ ์์ํ๋ฉด ์ฒ๋ฆฌํ๋ผ๋ ์์ฒญ๋ง ํ๊ณ ๋ค์ ์คํ์ผ๋ก ๋์ด๊ฐ๋ค. ๋ํ ์๋ต์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ด์ฉํด์ ์ฒ๋ฆฌํ๋ค.
const callback = (v) => console.log(v);
// ๊ฐ "fetch()"์ ๋ํ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์ฝ๋๋ฅผ ์คํํ๋ค.
fetch("https://jsonplaceholder.typicode.com/posts/1").then(result => result.json()).then(callback);
fetch("https://jsonplaceholder.typicode.com/posts/2").then(result => result.json()).then(callback);
fetch("https://jsonplaceholder.typicode.com/posts/3").then(result => result.json()).then(callback);
console.log("๋ค๋ฅธ ์ฒ๋ฆฌ 1");
console.log("๋ค๋ฅธ ์ฒ๋ฆฌ 2");
console.log("๋ค๋ฅธ ์ฒ๋ฆฌ 3");
// ๊ฒฐ๊ณผ => ๋ค๋ฅธ ์ฒ๋ฆฌ 1, ๋ค๋ฅธ ์ฒ๋ฆฌ 2, ๋ค๋ฅธ ์ฒ๋ฆฌ 3, fetch()์ ๊ฒฐ๊ด๊ฐ 3๊ฐ
// ๋จ, fetch()์ ๊ฒฐ๊ด๊ฐ์ ์์๋ฅผ ๋ณด์ฅํ์ง ์๋๋ค. ( 1, 2, 3 ์์๋ก ์ฝ๋๋ฅผ ์คํํด๋ 1, 2, 3 ์์๋ก ์๋ตํ์ง ์๋๋ค. )