Notice
Recent Posts
Recent Comments
Link
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
Tags
- setTimeout()
- Import
- ์ฐธ๊ณ ๋ธ๋ก๊ทธ
- slow and steady
- https://m.blog.naver.com/tt2t2am1118/221010125300
- https://youtube.com/playlist?list=PLuHgQVnccGMA5836CvWfieEQy0T0ov6Jh&si=FTaYv8m21EhO-A2K
- ๊ฒ์
- ๋๊ธฐ
- async
- db
- prj
- json
- promise
- ํผํ
- database
- JS #ํ๋ก์ ํธ
- addEventListener
- object
- sql
- await
- ajax
- execCommand
- Project
- ๋น๋๊ธฐ
- webpack
- mysql
- callback
- js
- eport
- Porject
Archives
- Today
- Total
C-log
section27-๋น๋๊ธฐ์ JavaScript ๋ณธ๋ฌธ
728x90
Topic | explain | class |
The Call Stack | ์ฑ ์ ์ฝ์ ๋ ์๊ฐ๋ฝ์ผ๋ก ์ง์ด๊ฐ๋ ํ์์ ๋น์ทํ๋ค. ์ฝ์คํ์ ์ค๋ช ํ๊ธฐ ์์ ์คํ์ ์ด์ ์ ์ธ๊ธํ๋ ๋ฐฐ์ด์ push, popm shift,unshift์ ๊ฐ๋ค. ์คํ์ ์ปดํจํฐ ๊ณผํ์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค. ํ์ ์ ์ถ(LIFO) ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ์๋ ค์ ธ ์๋ค. - ํฌ์ผ์ดํฌ ์ฝ ์คํ์ JS๊ฐ ์ฌ์ฉํ๋ ๋ฉ์ปค๋์ฆ์ด๋ค. ์ฌ๋ฌ ํจ์๋ฅผ ํธ์ถํ๋ ์คํฌ๋ฆฝํธ์์ ํด๋น ์์น๋ฅผ ์ถ์ ํ๋ค. ...(๋ง์ ๋ด์ฉ์ด ์๋ต) ์ฝ๋๋ฅผ ํตํ ํจ์ ํํ ![]() ์ฝ ์คํ์ ํจ์ ํธ์ถ ํํ ![]() |
์ฝ ์คํ(Call Stack) |
loupe Site : http://latentflip.com/loupe/?code=JC5vbignYnV0dG9uJywgJ2NsaWNrJywgZnVuY3Rpb24gb25DbGljaygpIHsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gdGltZXIoKSB7CiAgICAgICAgY29uc29sZS5sb2coJ1lvdSBjbGlja2VkIHRoZSBidXR0b24hJyk7ICAgIAogICAgfSwgMjAwMCk7Cn0pOwoKY29uc29sZS5sb2coIkhpISIpOwoKc2V0VGltZW91dChmdW5jdGlvbiB0aW1lb3V0KCkgewogICAgY29uc29sZS5sb2coIkNsaWNrIHRoZSBidXR0b24hIik7Cn0sIDUwMDApOwoKY29uc29sZS5sb2coIldlbGNvbWUgdG8gbG91cGUuIik7!!!PGJ1dHRvbj5DbGljayBtZSE8L2J1dHRvbj4%3D |
||
๋๋ฒ๊น ์ ํตํด์ ์ฝ ์คํ์ ์์ง์๊ณผ ๋ณ๋์ ํ์ธ ํ ์ ์๋ค. | ||
JS is Single Threaded | JS๋ ์ผ์ ํ๋์ฉ ๋ฐ์ ๋ชปํ๋ค. setTimeout(~)์ ์์๋ก ๋ณด๋ฉด ![]() ![]() ์ setTimeout์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์๋ log๊ฐ ์คํ์ด ๋ ๊น? JS๊ฐ ๋จ์ผ ์ฐ๋ ๋์ด๋ฉด ๋ชจ๋ ๋ฉ์ถ๊ณ setTimeout์ ๊ธฐ๋ค๋ ค์ผ ํ๋ ๊ฑฐ ์๋๊ฐ? -์ ์ด๋ฌ๋์ง ์๋์๋ฆฌ๋ฅผ ๋ณด์ JS๋ ์ฝ๋์ผ๋ฟ ์คํํ๊ณ ์๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ณด์์ผํ๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฌด์์ด ๋์๋ (๋๊ฐ๋ C++๋ก ์ด๋ฃจ์ด์ง๊ณ ์์ฑ๋์ด์ ธ ์๋ค.)๋ธ๋ผ์ฐ์ ๋ JS๊ฐ ํ ์ ์๋ ๊ฒ๋ค์ ํ๋ค. ๋ฐ๋ผ์ JS๋ ์ค์ ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ํน์ ์์ ์ ๋๊ธด๋ค. ๊ทธ ํน์ ์์ ์ด ๋ฐ๋ก WebAPIs๋ผ๋ ๊ฒ์ด๋ค. WebAPIs๋ JS๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ๋ก ์ ๋ฌ๋๋ค. JS์ ์ฝ ์คํ์ WebAPI ํจ์(setTimeout)๋ผ๋ ๊ฒ์ ์ธ์ํ๊ณ ๋ธ๋ผ์ฐ์ ๋ก ์ ๋ฌ ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ก JS๊ฐ ํ ์ ์๋ ๋์(๋ช ๋ น์ด)์ ์ํํ๋ค. |
WebAPI์ ๋จ์ผ ์ค๋ ๋ |
CallBackHELL | - | Callback์ด๋ ์ง์ฅ :( |
ENTER PROMISES |
Promise๋ ์ด๋ค ์ฐ์ฐ, ๋น๋๊ธฐ ์ฐ์ฐ์ด ์ต์ข
์ ์ผ๋ก ์๋ฃ ํน์ ์ฑ๊ณตํ๋์ง ์คํจํ๋ ์๋ ค์ฃผ๋ ๊ฐ์ฒด์ด๋ค. fakeRequest๋ฅผ ํตํด ๊ตฌ์กฐ๋ง ๋ณด์์ ๋ ์คํจ์ ์ฑ๊ณต์ ๋ ๊ฐ๋ฆผ๊ธธ๋ก๋ง ๋ณด์ธ๋ค. |
Callback์ ์ฌ์ฉํ fakeRequest |
Promise๋ ํ๋์ ๊ฐ์ฒด์ด๋ค.์ต์ข ๊ฐ์ด๋ ์๋์ฌ๋ถ์ ๋ํ ์ฝ์์ด๋ค. | Promise๋ฅผ ์ฌ์ฉํ fakeRequest | |
Promise์ ์ํ๋ฅผ ํ๋์ฉ ์ดํด๋ณด์ | ์์ ๋ง์ Promises๋ง๋ค๊ธฐ |
|
new Promise((resolve, reject) => {
resolve();
})//fullfiled
new Promise((resolve, reject) => {
reject();
})//Uncaught (in promise)
new Promise((resolve, reject) => {
})//pending
|
||
๊ฐ์ Request๋ฅผ ํตํด์ Promise๋ฅผ ์ฌ์ฉํ๋ค. ์ฝ๋๋ฅผ ์ฝ์ด๋ณด๊ณ ๋ถ์ํด๋ณด์ | ||
const fakeRequest = (url) => {
return new Promise((resolve, reject) => {
const rand = Math.random();
setTimeout(() => {
if (rand < 0.7) {
resolve('YOUR FAKE DATA HERE');
}
reject('Request Error!');
}, 1000)
})
}
fakeRequest('/dogs/1')
.then((data) => {
console.log("DONE WITH REQUEST!");
console.log("data is: ", data);
})
.catch((err) => {
console.log("OH, NO!", err)
})
|
||
ASYNC FUNCTIONS |
๋น๋๊ธฐ : ํน์ ์์
์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์์
์ ์ํํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋น๋๊ธฐ ํจ์ : ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์์ฃผ ๊น๋ํ๊ฒ ์ ๋ฆฌํ๋ ์ฝ๋์ด๋ค. Promise์ ๋ฐ์ ํ๊ฒ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ ์์๋๋ฉด ์ข๋ค. |
๋น๋๊ธฐ ํค์๋ |
Async : ํจ์๋ฅผ ๋น๋๊ธฐ ํจ์๋ก ์ ์ธํ๋ ํค์๋, ํจ์ ์์ ์์ฑ์ ํ๋ค. Async๋ฅผ ์ฌ์ฉํ๋ฉด ์๋์ ์ผ๋ก promise๋ฅผ ๋ฐํํ๋ค.(์ง์ retrun๊ฐ์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ง ์์๋ ์๋ฌต์ ์ผ๋ก ๋ฐํํ๋ค.) | ||
throw | ||
const login = async (username, password) => {
if (!username || !password) throw 'Missing Credentials';
if (password === 'rdwoo') return 'Welcome'
throw 'Invalid Password';
}
login('fdfadf')
.then(msg => {
console.log("Logged in!")
console.log(msg);
})
.catch(err => {
console.log('ERROR!')
console.log(err);
})
์ฌ๊ธฐ์ msg์ ๋ชจ์๊ณผ ๋ชจ์ต์ด ์์ด๋ฌ๋ํ๋ค. ์๊ณ ๋ดค๋๋ =>{}์์ ํจ์๊ฐ ์คํ๋ ํ์ ๋ฐํ๊ฐ์ด msg์ ๊ฐ์ด ๋๋ ๊ฒ์ด๋ค. ![]() ![]() |
||
Await : ๋น๋๊ธฐ๋ฅผ ๋๊ธฐ์ ์ผ๋ก ๋ณด์ด๊ฒ ํ๋ค. | ๋๊ธฐ ํค์๋ |
|
async function rainbow() {
await DelayedColorChange('red', 1000);
await DelayedColorChange('orange', 1000);
await DelayedColorChange('green', 1000);
await DelayedColorChange('yellow', 1000);
await DelayedColorChange('#006d77', 1000);
await DelayedColorChange('violet', 1000);
return console.log("ALL DONE");
}
// rainbow().then(() => console.log("END OF RAINBOW!"))
async function printRainbow() {
await rainbow();
console.log("END OF RAINBOW!");
}
printRainbow();
|
||
![]() |
||
Async์ Error ์ก๊ธฐ : try,catch | ๋น๋๊ธฐ ํจ์์ ์ค๋ฅ ์ฒ๋ฆฌํ๊ธฐ |
|
async function makeTwoRequests() {
try {
let data1 = await fakeRequest('./page1');
console.log(data1);
let data2 = await fakeRequest('./page2');
console.log(data2);
}
catch (e) {
console.log("CAUGHT AN ERROR!");
console.log("error is : ", e);
}
}
|
728x90
'๐JS > โกver.0' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
section29-ํ๋กํ ํ์ , ํด๋์ค, ๊ทธ๋ฆฌ๊ณ OOP(๋ฐฑ์๋๋ฅผ ๋ฃ๊ณ ๋์ค์ ๋ค์ ๋ค์ด๋ ๋ฌด๋ฐฉํ๋ค) (0) | 2023.04.04 |
---|---|
section28-AJAX์API (0) | 2023.04.03 |
section24~25-DOM์ด๋~DOM ์ด๋ฒคํธ (0) | 2023.03.24 |
section23-JavaScript์ ์ต์ ๊ธฐ๋ฅ๋ค (0) | 2023.03.24 |
section22-์ฝ๋ฐฑ๊ณผ ๋ฐฐ์ด (0) | 2023.03.24 |
Comments