[TIL] Day24
[SEB FE] Day24
โฐ
Callback
: ๋ค๋ฅธ ํจ์์ ์ ๋ฌ์ธ์(argument)๋ก ๋๊ฒจ์ฃผ๋ ํจ์
โย ํ์์ ๋ฐ๋ผ ์ฆ์ ์คํ(synchronously
) ๊ฐ๋ฅ, ๋์ค์(asynchronously
) ์คํ๋ ๊ฐ๋ฅ
๋ฐ๋ณต ์คํํ๋ ํจ์ (iterator
)
// ๋ฐฐ์ด ๊ธธ์ด๋งํผ ๋ฐ๋ณต ์คํ
[1, 2, 3].map(function(element, index) {
return element * element;
});
์ด๋ฒคํธ์ ๋ฐ๋ฅธ ํจ์ (event handler
)
document.querySelector('#btn').addEventListener('click', function(e) {
console.log('button clicked');
});
function handleClick() {
console.log('button clicked');
};
// handleClick() ํธ์ถ์ return ๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ์คํ ๊ฒฐ๊ณผ๋ 'undefined'
document.querySelector('#btn').onclick = handleClick; // โญ๏ธ
document.querySelector('#btn').onclick = function() {
handleClick();
} // โญ๏ธ
document.querySelector('#btn').onclick = handleClick.bind(); // โญ๏ธ
// ํจ์ ์คํ์ ์ฐ๊ฒฐํ๋ ๊ฒ์ด ์๋ -> 'ํจ์ ์์ฒด'๋ฅผ ์ฐ๊ฒฐํด์ผ ํจ!
document.querySelector('#btn').onclick = handleClick(); // โ
โฐย ๋๊ธฐ์ (
synchronous
): ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๊ฐ ๋์์ ๋ฐ์
โฐย blocking
โฐย ๋น๋๊ธฐ์ (
asynchronous
): ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ ๋์์ ๋ฐ์ํ์ง ์์
โฐย non-blocking
โยNode.js
๋non-blocking
ํ๊ณ ๋น๋๊ธฐ์ (asynchronous
)์ผ๋ก ์๋ํ๋ ๋ฐํ์์ผ๋ก ๊ฐ๋ฐ
๐ย ๋น๋๊ธฐ ํจ์ ์คํ์ ์์๊ฐ ์ ๋ง๋๋ก โ ์์ ์ ์ด๋ฅผ ํ๊ณ ์ถ์ด โ
callback
โ But, callback ํจ์๋ฅผ ๋ง์ด ์ฐ๋ฉด ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง โcallback hell
โpromise
์ฌ์ฉ
๐ย ์ฆ, ๋น๋๊ธฐ ํจ์์ ์์๋ฅผ ์ ์ดํ๊ณ ์ถ์ ๋callback
์ ์ด์ฉ
callback ํจํด
let request = 'coffee';
orderCoffeeAsync(request, function(response) {
drink(response);
});
์ด๋ฒคํธ ๋ฑ๋ก ํจํด
let request = 'coffee';
orderCoffeeAsync(request).onready = function(response) {
drink(response);
});
โฐย
client
: ์๋ฒ๋ก ์ ์ํ๋ ์ปดํจํฐ
โฐยserver
: ๋ฌด์ธ๊ฐ(์๋น์ค, ๋ฆฌ์์ค ๋ฑ)๋ฅผ ์ ๊ณตํ๋ ์ปดํจํฐ
๐ย
callback hell
ํ์ถ์ ์ํด ์ฌ์ฉ โ But,Promise
๋Promise hell
์ ๊ฐํ ์ ์์
Promise.prototype.then
:Promise
๋ฅผ ๋ฐํํ๋ฏ๋ก ๋ฉ์๋ ์ฒด์ด๋(Chaining) ๊ฐ๋ฅPromise.prototype.catch
: ์๋ฌ๊ฐ ๋ ๊ฒฝ์ฐ ์คํ๋๋ ๋ฉ์๋ (๋ง์ง๋ง ์ฒด์ด๋์์ ์คํ)
const printString = (string) => {
// 2๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ธ reject์ ์๋ฌ๊ฐ ๋ฌ์ ๊ฒฝ์ฐ์ ์ฝ๋ฐฑ ํจ์์ ์ ์ด์ฃผ๋ฉด .catch์ ๊ฐ์ ์ญํ ์ํ
return new Promise((resolve, reject) => {
setTimeout(
() => {
console.log(string)
resolve()
},
Math.floor(Math.random() * 100) + 1
)
})
}
const printAll = () => {
printString('A');
.then(() => {
return printString('B')
})
.then(() => {
return printString('C');
})
}
printAll()
}
==========
function goToBed() {
return new Promise((resolve, reject) => {
setTimeout(() => {resolve(print goToBed)}, 100)
})
}
promise hell
์ ํ์ถ์ ์ํด ์ฌ์ฉ
const result = async () => {
const one = await gotoComputer();
console.log(one)
const two = await sitAndCode();
console.log(two)
const three = await eatLunch();
console.log(three)
}
result();
โ await
ํค์๋๋ async
ํค์๋๋ฅผ ์์ ๋ถ์ธ function
์์์๋ง ๋์
JS ๋ด์ฅ ๋น๋๊ธฐ ํจ์
setTimeout(callback, millisecond)
: ์ผ์ ์๊ฐ ํ์ ํจ์ ์คํ
```jsx
const timer = setTimeout(function () {
console.log('1์ด ํ ์คํ');
}, 1000);
// 1000 -> 1์ด
// 10000 -> 10์ด
```
โ setTimeout
์ ๋๋ฒ์งธ ์ ๋ฌ์ธ์์ ๊ฐ์ ๋ฃ์ง ์์๋ ๋์์ ํ์ง๋ง, timer
์ ๊ธฐ๋ฅ์ ์ ํclearTimeout(timerId)
: setTimeout ํ์ด๋จธ ์ข
๋ฃ
```jsx
clearTimeout(timer);
```
setInterval(callback, millisecond)
: ์ผ์ ์๊ฐ์ ๊ฐ๊ฒฉ์ ๊ฐ์ง๊ณ ํจ์ ๋ฐ๋ณต์ ์คํ
```jsx
setInterval(function() {
conosle.log('3์ด๋ง๋ค ์คํ');
}, 3000);
```
clearInterval(timerId)
clearInterval(timer);