๋๊ธฐ์ ์คํ
: ์ฝ๋๊ฐ ์์์ ๋ง์ถฐ์ ์๋์ ์ผ๋ก ์คํ๋จ
hoisting
: var๋ณ์, function declaration( ํจ์์ ์ธ)๋ค์ด์๋์ ์ผ๋ก ์ ์ผ ์์ ์ ์ธ๋จ
callback ํจ์
: ๋ด๊ฐ ์ ๋ฌํด ์ค ํจ์๋ฅผ ๋์ค์ ์คํํด์ค
* setTimeout( hadler , timeout)
- handler : callback ํจ์
- timeout: ์ง์ ๋ ์๊ฐ ms ๋จ์ (1์ด 1000)
๋น๋๊ธฐ ์คํ (์ค์ต)
js์์ง์ ์ฝ๋๋ฅผ ์ ์ผ ์์์๋ถํฐ ์๋๋ก ์คํ
console.log('1');
setTimeout(function(){
console.log(2);
},1000)
console.log('3');
//ํ์ดํ ํจ์๋ก ํํ ๊ฐ๋ฅ
console.log('1');
setTimeout(()=> console.log('2'),1000);
console.log('3');
1 -> setTimeout( ๋ธ๋ผ์ฐ์ API) -> 3
๋ธ๋ผ์ฐ์ ์๊ฒ ์์ฒญ -> "๋ธ๋ผ์ฐ์ ์ผ ์ด๊ฑฐ ํด์ค" -> 1์ด ์ง๋จ -> console.log(2)์ ๋ฌ
๋๊ธฐ ํจ์
console.log('1');
setTimeout(() =>console.log(2),1000);
console.log('3');
function printImm(print) {
print();
}
printImm( ()=> console.log('heelo'));
1 > 3 > heelo > 2
๋น๋๊ธฐ ํจ์
console.log('1');
setTimeout(() =>console.log(2),1000);
console.log('3');
function printImm(print) {
print();
}
printImm( ()=> console.log('heelo'));
function printWaa(print,timeout){
setTimeout(print,timeout);
}
printWaa( ()=> console.log('async callback'),2000);
1 > 3 > heelo > 2 > async acllback
์ฝ๋ฐฑ์ง์ฅ ๋ง๋ค๊ณ ํด๊ฒฐํด๋ณด๊ธฐ
// 1) ์ฌ์ฉ์ ํ์ธ 2)๊ถํ ๋ถ์ฌ
// ๋น์ฅ ์๋ฒ์ ์ฐ๊ฒฐ์ ์๋๋ ๋น์ท ํ๊ฒ setTimeout์ ์ด์ฉํ์ฌ ๋น๋๊ธฐ ์ฒ๋ฆฌ
class UserStorage {
// 1) id์ pw ๋ฅผ ๋น๊ตํด์ ์ฌ์ฉ์๊ฐ ๋ง๋์ง ํ์ธ
loginUser( id,password,onSuccess,onError){
setTimeout(()=>{
if(
(id==='tami' && password==='cool')||
(id==='coder' && password==='academy')
){
onSuccess(id);
}else{
onError(new Error('not found'));
}
},2000);
}
// 2) ์ฌ์ฉ์๊ฐ ๊ด๋ฆฌ์์ธ์ง ํ์ธ ํ ๊ถํ ๋ถ์ฌ
getRoles(user,onSuccess,onError){
setTimeout(()=>{
if(user==='tami'){
onSuccess({name:'tami',role:'admin'});
}else{
onError(new Error('no access'));
}
},1000);
}
}
// ์คํ
const userStorage = new UserStorage();
const id = prompt('enter your id');
const password = prompt('enter your password');
userStorage.loginUser(
id,
password,
user=>{
userStorage.getRoles(
user,
userWithRole =>{
alert(`hello ${userWithRole.name},you have ${userWithRole.role}`);
},
error=>{console.log(error);}
);
},
error=>{console.log(error);
}
);
๋ฌธ์ ์
1) ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง
2) ๋น์ฆ๋์ค ๋ก์ง ์ดํด๊ฐ ์ด๋ ค์
Promise ํ๋ก๋ฏธ์ค
JS์๋ ์ ๊ณตํ๋ ๋น๋๊ธฐ๋ฅผ ๊ฐํธํ๊ฒ ์ฒ๋ฆฌํ ์ ์๊ฒ ํ๋ object
callback์ ์ฐ์ง ์๊ณ
state
pending -> fullfilled or rejected
- pending : promise๊ฐ ๋ง๋ค์ด์ ธ์ ์ฐ๋ฆฌ๊ฐ ์ง์ ํ operation์ด ์งํ์ค์ผ ๋
- fullfilled : operation ์ฑ๊ณต์ ์ผ๋ก ์คํ
- rejected file ์ฐพ์์ ์๊ฑฐ๋ network ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋
producer (์ ๋ณด ์ ๊ณต์) ์ consumer(์ ๋ณด ์๋น์) ์ ์ฐจ์ด
ํ์ผ์ ์ฝ์ด์ค๊ณ ๋คํธ์ํฌ ํต์ ์ด ์งํ๋๋ ๋์ ์๋ฌด์ผ๋ ํ์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ์ผ๋ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ
promise๋ execute
const promise = new Promise((res,rej)=>{
console.log('doging somctins');
});
promise๊ฐ ๋ง๋ค์ด ์ง๋ ์๊ฐ network ํต์ ์ด ์์๋จ executor(์ฝ๋ฐฑํจ์== (res,rej))!!
์ฌ์ฉ์๊ฐ ์๊ตฌํ์ง ์๋ ๋คํธ์ํฌ ํต์ ์ด ์ผ์ด๋์ง ์๊ฒ ์กฐ์ฌ
ใน
// Producer
//์ฑ๊ณตํ์ ๋ resolve
//์คํจ ์ reject
const promise = new Promise((resolve,reject)=>{
console.log('doging somctins');
setTimeout(()=>{
// resolve('tami');
reject(new Error('no network'));
},2000)
});
//Cousumer value==tami
//then ์ฑ๊ณต์
// catch ์๋ฌ์
// finally ์ฑ๊ณต์ฌ๋ถ์ ๊ด๊ณ ์์ด
promise
.then((value)=>{
console.log(value);
})
.catch(error=>{
console.log(error);
})
.finally(()=>{
console.log('finally');
})
promise ์ฒด์ด๋
.then : ๊ฐ ์ ๋ฌ, promise ์ ๋ฌ ๋๋ค ๊ฐ๋ฅ
๋น๋๊ธฐ ๋์๋ค์ ๋ฌถ์ด์ ์งํํ๊ธฐ๋ ๊ฐ๋ฅ
const fetchNumber = new Promise((resolve,reject)=>{
setTimeout(()=> resolve(1),1000);
});
fetchNumber
.then(num=> num*2)
.then(num => num*3)
.then(num =>{
return new Promise((resolve,reject)=>{
setTimeout(()=>resolve(num-1),1000);
});
})
.then(num =>console.log(num));
Promise() ๋ฅผ ํ์ฉํ์ฌ ์ฝ๋ฐฑ์ง์ฅ ๋น ์ ธ๋๊ฐ๊ธฐ
class UserStorage {
loginUser( id,password){
return new Promise((resolve, reject)=>{
setTimeout(()=>{
if(
(id==='tami' && password==='cool')||
(id==='coder' && password==='academy')
){
resolve(id);
}else{
reject(new Error('not fonud'));
}
},1000);
})
}
getRoles(user){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
if(user==='tami'){
resolve({name:'tami',role:'admin'});
}else{
reject(new Error('no access'));
}
},1000);
})
}
}
์ฝ๋ฐฑ์ง์ฅ์ด์๋ ์ฝ๋๊ฐ
// ์ฝ๋ฐฑ ์ง์ฅ
const userStorage = new UserStorage();
const id = prompt('enter your id');
const password = prompt('enter your password');
userStorage.loginUser(
id,
password,
user=>{
userStorage.getRoles(
user,
userWithRole =>{
alert(`hello ${userWithRole.name},you have ${userWithRole.role}`);
},
error=>{console.log(error);}
);
},
error=>{console.log(error);
}
);
Promise๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ํ๋์ ํ์ธํ ์ ์์
// Promise ์ฌ์ฉ
const userStorage = new UserStorage();
const id = prompt('enter your id');
const password = prompt('enter your password');
userStorage.loginUser(id,password)
.then(user => userStorage.getRoles(user))
.then(user=>alert(`hello ${user.name},you have ${user.role}`))
.catch(console.log);
์ฐธ๊ณ ํ ์์
www.youtube.com/watch?v=s1vpVCrT8f4&list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2&index=11
'๐ JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] Class ์ ์์ (0) | 2021.03.10 |
---|---|
[์๋ฐ์คํฌ๋ฆฝํธ] fetch() API ํจ์๋ก ํธ์ถํ๊ธฐ (4) | 2021.02.26 |
Javascript JSON.parse(), JSON.stringify() ์ฌ์ฉํ๋๋ฒ (0) | 2021.02.23 |
Node.JS express๋ก ์๋ฒ ๊ตฌ์ฑํ๊ธฐ (5) | 2021.02.23 |
์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด (0) | 2021.02.22 |
๋๊ธ