function a(){
return new Promise(resolve=>{
console.log('1');
setTimeout(()=>{console.log('first setTimeout');},1000)
resolve(1);
})
}
function b(){
return new Promise(resolve=>{
console.log('2');
setTimeout(()=>{console.log('second setTimeout');},1000);
resolve(2);
})
}
async function c(){
const aa = await a();
const bb = await b();
return aa+bb;
}
c().then(console.log)
- a()ํจ์๊ฐ ์คํ๋๋ฉด์ 1์ด ์ถ๋ ฅ๋๊ณ
- setTimeout์ ์ํด 1์ด๋ค first setTimeout์ด ์ถ๋ ฅ๋ ์์ ์ด๊ณ
- resolve๋ก ์ธํด ๋ฐ๋ก aa๋ก ๋ฐํ์ด๋๋ค.
- b()ํจ์๊ฐ ์คํ๋๋ฉด์ 2๊ฐ ์ถ๋ ฅ๋๊ณ
- setTimeout์ ์ํด 1์ด๋ค second setTimeout์ด ์ถ๋ ฅ๋ ์์ ์ด๊ณ
- resolve๋ก ์ธํด ๋ฐ๋ก bb๊ฐ ๋ฐํ๋๊ณ aa+bb๊ฐ ๋ฐํ๋ 3์ด ์ถ๋ ฅ๋๋ค.
- 1์ด๋ค ๊ฐ๊ฐ์ setTimeout์ ์ํด first setTimeout๊ณผ second setTimeout์ด ์ถ๋ ฅ๋๋ค.
1 //๋ฐ๋ก
2 //๋ฐ๋ก
3 //๋ฐ๋ก
first setTimeout //1์ด ๋ค
second setTimeout //1์ด ๋ค
function a(){
return new Promise(resolve=>{
console.log('1');
setTimeout(()=>{console.log('first setTimeout'); resolve(1);},1000)
})
}
function b(){
return new Promise(resolve=>{
console.log('2');
setTimeout(()=>{console.log('second setTimeout'); resolve(2)},1000)
})
}
async function c(){
const aa = await a();
const bb = await b();
return aa+bb;
}
c().then(console.log)
- a()ํจ์๊ฐ ์คํ๋๋ฉด์ 1์ด ์ถ๋ ฅ๋๋ค.
- setTimeout์ ์ํด first setTimeout์ด 1์ด ๋ค ์ถ๋ ฅ๋ ์์ ์ธ๋ฐ resolve(1)์ด 1์ด ๋ค ์ด๋ฏ๋ก ๋ค์ ๋ด์ฉ์ ์งํํ๊ธฐ๊น์ง 1์ด๋์ ๊ธฐ๋ค๋ฆฐ๋ค.
- 1์ด ๋ค first setTimeout์ ์ถ๋ ฅํ๋ฉด์ b()ํจ์๊ฐ ์คํ๋๊ณ 2๊ฐ ์ถ๋ ฅ๋๋ค.
- ๋ง์ฐฌ๊ฐ์ง๋ก setTimeout์ ์ํด second setTimeout์ด ๊ทธ๋ค์ 1์ด ๋ค (์ฒ์๊ธฐ์ค 2์ด ๋ค) ์ถ๋ ฅ๋ ์์ ์ด๊ณ resolve(2) ๋ํ 1์ด ๋ค ์ด๋ฏ๋ก ๋ค์ ๋ด์ฉ์ ์งํํ์ง์๊ณ ๊ธฐ๋ค๋ฆฐ๋ค.
- 1์ด ๋ค second setTimeout์ ์ถ๋ ฅํ๊ณ 2๋ฅผ ๋ฆฌํดํ bb๋ฅผ ํตํด aa+bb๋ฅผ ๋ฆฌํดํ๊ณ ๋ฐ๋ก ๋ ํฉ์ธ 3์ ์ถ๋ ฅํ๋ค.
1 //๋ฐ๋ก
first setTimeout //1์ด ๋ค
2 //1์ด ๋ค
second setTimeout //2์ด ๋ค
3 //2์ด ๋ค
async function a(){
await b();
console.log(2)
await c();
console.log(4)
}
function b(){
return new Promise(resolve=>{
fetch(`https://js-todo-list-9ca3a.df.r.appspot.com/api/users`,{
method:"POST",
headers:{"Content-Type":"application/json"},
body:JSON.stringify({
name : `$abc`
})
}).then(res=>res.json).then(data=>{
console.log(1)
resolve();
}).catch(err=>console.log(err));
})
}
function c(){
return new Promise((resolve)=>{
fetch(`https://js-todo-list-9ca3a.df.r.appspot.com/api/users`,{
method:"POST",
headers:{"Content-Type":"application/json"},
body:JSON.stringify({
name : `def`
})
}).then(res=>res.json).then(data=>{
console.log(3)
resolve();
}).catch(err=>console.log(err));
})
}
a();
Promise {<fulfilled>: undefined}
1
2
3
4
์์ฐจ์ ์ผ๋ก fetch ์๋ฃ ํ ์งํ์ ํ๋ค.
async function a(){
await b();
console.log(2)
await c();
console.log(4)
}
function b(){
return new Promise(resolve=>{
fetch(`https://js-todo-list-9ca3a.df.r.appspot.com/api/users`,{
method:"POST",
headers:{"Content-Type":"application/json"},
body:JSON.stringify({
name : `$abc`
})
}).then(res=>res.json).then(data=>{
console.log(1)
}).catch(err=>console.log(err));
resolve();
})
}
function c(){
return new Promise((resolve)=>{
fetch(`https://js-todo-list-9ca3a.df.r.appspot.com/api/users`,{
method:"POST",
headers:{"Content-Type":"application/json"},
body:JSON.stringify({
name : `def`
})
}).then(res=>res.json).then(data=>{
console.log(3)
}).catch(err=>console.log(err));
resolve();
})
}
a();
2
4
Promise {<fulfilled>: undefined}
1
3
resolve๋ฅผ ํตํด 2,4๋ ๋จผ์ ์ถ๋ ฅ๋๊ณ ์๊ฐ์ด ์ง๋ ํ (์งง์์๊ฐ)
1,3์ด ๊ฐ๊ฐ ์ถ๋ ฅ๋๋ค.
์ฐ๋ฆฌ๋ setTimeout์ ๋ฆฌํดํ๋ resolve๋ฅผ ๋ฃ๋ ์ ๋ฃ๋์ ๋ฐ๋ผ
๊ฐ๊ฐ์ await์ด ๊ฐ์ ์๊ฐ์ ๊ฐ์ด ์คํ๋์ด ๊ฐ์ด ์ถ๋ ฅ๋ ์๋ ์๊ณ ๋ค๋ฅธ await์ ๊ธฐ๋ค๋ฆฐ ํ์ ๋ค์ await์ ์คํ ํ ์๋ ์๋ค.
async๋ฅผ ํตํด ๋ฆฌํดํ ๊ฐ์ Promise์ด๋ฏ๋ก then์ ํตํด ํ์ธ ๊ฐ๋ฅํ๋ค.