์ฝ๋ฐฑํจ์๋ฅผ ์ํด ๋ง๋ค์ด์ง Promise
๐ฉโ๐ ํ๋ก๋ฏธ์ค๋?
ํจ์๊ฐ ์คํํ์๋ ์ฑ๊ณต/์คํจ์ ๋ฐ๋ผ ๋ค์ ๋์์ ์ค์ ํ๋ ๊ธฐ๊ณ๋ผ๊ณ ์๊ฐํ๋ฉด ๋จ.
๐ ์์
var promise = new Promise(function(resolve,reject){
var sum = 1+1
resolve(์ฐ์ฐ)
//๊ผญ ์ฑ๊ณต ์คํจ๋ฅผ ์ค์ ํด์ค์ผํจ
//์ฑ๊ณต์ then์ ์ฐ์ฐ์ด๋ผ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ์ก
});
promise.then(function(result){ //์ฑ๊ณต์ ์คํ
}).catch(function(){ //์คํจ์ ์คํ
});
โป ์ฑ๊ณต/์คํจ ํ์ ์ ์๋ pending ์ด๋ผ๊ณ ๋์ด (ํ์ ๋๊ธฐ์ํ)
๐ ๋ ์ฝ๊ฒ
var ์ฑ๊ณต์คํจํ์ ๊ธฐ = new Promise(function(์ฑ๊ณต,์คํจ){
var ์ผ๋ํ๊ธฐ์ผํ๊ธฐ = 1+1
์ฑ๊ณต(์ฐ์ฐ)
});
promise.then(function(๋ํ๊ฒฐ๊ณผ){ //์ฑ๊ณต์ ์คํ
console.log(๋ํ๊ฒฐ๊ณผ)
}).catch(function(์คํจ๊ฒฐ๊ณผ){ //์คํจ์ ์คํ
console.log("์คํจํ์ด์")
});
๐ ์ด๊ฒ ํ์ฉ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ : ajax์ axios
async
๐ฉโ๐ Promise ๋ง๋ค๊ธฐ ๊ท์ฐฎ์ ๋ ์ฌ์ฉํ๋ ES8๋ฌธ๋ฒ์
๐ ์์
async function ๋ํ๊ธฐ(){
1 + 1
}
๋ํ๊ธฐ().then(function(๊ฒฐ๊ณผ){
console.log(๊ฒฐ๊ณผ,'๋ํ๊ธฐ ์ฑ๊ณตํ์ด์')
});
async ๋ฌธ๋ฒ์ ํจ์์๋ง ๋ถ์ผ ์ ์๋๋ฐ ์ด๊ฑธ ๋ถ์ด๋ฉด ์๋์ผ๋ก ํจ์๋ฅผ ํ๋ก๋ฏธ์ค ํจ์๋ก ๋ฐ๊ฟ์ค
๋จ, async๋ฌธ๋ฒ์ ์ฑ๊ณต์์๋ง ์คํ ์คํจ์ ๋ฉ์ถ๋ค๋ ๋จ์ ์ ๊ฐ์ง๊ณ ์์.
await
๐ฉโ๐ Promise ์ฑ๊ณต์ then ๋์ ์ฌ์ฉํ๊ณ ํ๋ก๋ฏธ์ค๊ฐ ๋ค ๋ ๋ ๊น์ง ๊ธฐ๋ค๋ ค์ฃผ๋ ๋ฌธ๋ฒ
๐ ์์
async function 3์ด์๋ค๋ณด๋ด๊ธฐ(){
var ๋ณด๋ด๊ธฐ = new Promise((์ฑ๊ณต, ์คํจ)=>{
setTimeout(function(){
์ฑ๊ณต("success")
},3000)
});
var ๋ฐ๊ธฐ = await ๋ณด๋ด๊ธฐ;
console.log(๋ฐ๊ธฐ);
}
3์ด์๋ค๋ณด๋ด๊ธฐ()
๋ณด๋ด๊ธฐ Promise์์ ์ฑ๊ณตํ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์ ๋ฐ๊ธฐ์ ์ฐ๊ฒฐ์ํฌ๋ ค๊ณ ํจ
๋ณด๋ด๊ธฐ์์ ๊ฒฐ๊ณผ๊ฐ ์ค๊ธฐ๊น์ง๋ 3์ด์์๊ฐ์ด ๊ฑธ๋ฆผ
ํ์ง๋ง console์ 3์ด์ ์๊ฐ์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ณด๋ด๊ธฐ์ ๋ฐ๊ธฐ๋ฅผ ์ฐ๊ฒฐ์ํค๊ธฐ ๋๋ฌธ์
์ฝ์์ success๋์ pending (๋๊ธฐ์ํ)๊ฐ ์ฐํ๊ฒ ๋จ
๊ทธ๋ ๊ธฐ์ ๋ณด๋ด๊ธฐ์ 3์ด๊ฐ ๋ค ํ๋ฅธ ํ ๋ฐ๊ธฐ์ ์ฐ๊ฒฐ์์ผ์ฃผ์ธ์ ๋ผ๊ณ ์์ฒญํ๋๊ฒ์ด await