* async, await๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก๋ฏธ์ค์ ๋ฉ์ธ ๋ฉ์๋๋ฅผ ์ฒด์ด๋ ํ์์ผ๋ก ํธ์ถํ๋ ๊ฒ๋ณด๋ค ๊ฐ๋ ์ฑ์ด ์ข์์ง.
* async: ํญ์ ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํ
async function getName(){
return "Mike";
}
console.log(getName());
- ํจ์๋ฅผ ํธ์ถํ๊ณ then์ ์ฌ์ฉํ ์ ์์
async function getName(){
return "Mike";
}
getName().then((name)=>{
console.log(name);
}); //Mike
- ๋ง์ฝ ๋ฐํ ๊ฐ์ด Promise๋ฉด ๊ทธ ๊ฐ์ ๊ทธ๋๋ก ์ฌ์ฉ
async function getName(){
return Promise.resolve("tom");
}
getName().then((name)=>{
console.log(name);
}); //tom
- ํจ์ ๋ด๋ถ์์ ์์ธ ๋ฐ์ ์ rejected ์ํ์ Promise๊ฐ ๋ฐํ๋จ.
async function getName(){
throw new Error("err,,");
}
getName().catch((err)=>{
console.log(err);
});
*await: async ๋ด๋ถ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ. ์ผ๋ฐ ํจ์์์ ์ฌ์ฉ ์ ์๋ฌ ๋ฐ์. await ํค์๋์ ์ค๋ฅธ์ชฝ์๋ Promise๊ฐ ์ค๊ณ ๊ทธ promise๊ฐ ์ฒ๋ฆฌ๋ ๋ ๊น์ง ๊ธฐ๋ค๋ฆผ. ์ฌ๊ธฐ์๋ 1์ด ํ์ Mike๊ฐ console ์ฐฝ์ ์ฐํ.
-result์ getName์์ resolve ๋ ๊ฐ์ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ฃ์ด์ฃผ๋ ๊ฒ
function getName(name){
return new Promise((resolve, reject)=>{
setTimeout(()=>{
resolve(name);
},1000);
});
}
async function showName(){
const result = await getName('Mike');
console.log(result);
}
console.log("์์");
showName();
// ์์ -> Mike
์์) resolve
const f1 = () =>{
return new Promise((res,rej)=>{
setTimeout(()=>{
res("1๋ฒ ์ฃผ๋ฌธ ์๋ฃ");
},1000);
});
};
const f2 = (message) =>{
console.log(message);
return new Promise((res,rej)=>{
setTimeout(()=>{
res("2๋ฒ ์ฃผ๋ฌธ ์๋ฃ");
},3000);
});
};
const f3 = (message) =>{
console.log(message);
return new Promise((res,rej)=>{
setTimeout(()=>{
res("3๋ฒ ์ฃผ๋ฌธ ์๋ฃ");
},2000);
});
};
console.log('์์');
async function order(){
const result1 = await f1();
const result2 = await f2(result1);
const result3 = await f3(result2);
console.log(result3);
console.log("์ข
๋ฃ");
}
order();
// ์์ -> 1๋ฒ ์ฃผ๋ฌธ ์๋ฃ -> 2๋ฒ ์ฃผ๋ฌธ ์๋ฃ -> 3๋ฒ ์ฃผ๋ฌธ ์๋ฃ -> ์ฃต๋ฃ
=> Promise then ์ฌ์ฉํ๋ ๊ฒ ๋ณด๋ค ๊ฐ๋ ์ฑ ํจ์ฌ ๋ฐ์ด๋จ
- reject์์๋ try ~ catch ๋ฅผ ์ด์ฉํด ๊ฐ์ธ์ฃผ๋ฉด err ๋ฉ์์ง ๋จ๊ณ ์ข ๋ฃ๊น์ง ๋ํ๋จ. try ~ catch ์ฌ์ฉํ์ง ์์ผ๋ฉด 1๋ฒ ์ฃผ๋ฌธ ์๋ฃ๊น์ง ๋ํ๋๊ณ ์๋ฌ ๋ฐ์ํ์ฌ ์งํ x
const f1 = () =>{
return new Promise((res,rej)=>{
setTimeout(()=>{
res("1๋ฒ ์ฃผ๋ฌธ ์๋ฃ");
},1000);
});
};
const f2 = (message) =>{
console.log(message);
return new Promise((res,rej)=>{
setTimeout(()=>{
// res("2๋ฒ ์ฃผ๋ฌธ ์๋ฃ");
rej(new Error("err,,"));
},3000);
});
};
const f3 = (message) =>{
console.log(message);
return new Promise((res,rej)=>{
setTimeout(()=>{
res("3๋ฒ ์ฃผ๋ฌธ ์๋ฃ");
},2000);
});
};
console.log('์์');
async function order(){
try {
const result1 = await f1();
const result2 = await f2(result1);
const result3 = await f3(result2);
console.log(result3);
} catch(e){
console.log(e);
}
console.log("์ข
๋ฃ");
}
order();
// ์์-> 1๋ฒ ์ฃผ๋ฌธ ์๋ฃ ->Error: err,, -> ์ข
๋ฃ
โ Promise.all ์ฌ์ฉํ ๊ฒฝ์ฐ: async await ํจ์ ๋ด๋ถ์์๋ ๋น๋๊ธฐ ํจ์๋ฅผ ๋ณ๋ ฌ๋ก ์คํ ๊ฐ๋ฅ
console.log('์์');
async function order(){
try {
const result = await Promise.all([f1(), f2(), f3()])
console.log(result)
} catch(e) {
console.log(e);
}
console.log("์ข
๋ฃ");
}
order();
'js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
javascript Generator (0) | 2022.11.02 |
---|---|
javascript ํ๋ก๋ฏธ์ค (Promise) (0) | 2022.11.01 |
javascript ํด๋์ค(class) (0) | 2022.11.01 |
javascript ์์, ํ๋กํ ํ์ (Prototype) (0) | 2022.10.31 |
javascript ๋ฉ์๋ call, apply, bind (0) | 2022.10.31 |