카테고리 없음
JavaScript - async & await
Santino
2022. 10. 31. 00:09
* .then을 대체할 수 있는 다른 방법(더 간단하고 간결한 방법 / 더 자주 사용됨)
1) 왼쪽 코드 : timer(1000), 즉 코드가 정상적으로 실행이 된다면,
1초 후에 .then이후 코드가 실행이 되게 끔 (결과값 = '작업')
2) 오른쪽 코드 : 1)과 똑같이 실행이 되고,
async + await 는 함수와 항상 같이 써야만 작동이 됨.
함수( function )앞에 항상 async를 써줘야 하고,
함수 안에 await를 작성해주고,
마지막에 함수명( 여기서는 run())을 입력해주면 실행이 됨.
* 또 다른 예시
** promise를 이용한 예시_아래에 async await이용한 예시랑 비교해보기
function Timer(time){
return new Promise(function(resolve){
setTimeout(function(){
resolve(time)
}, time)
})
}
console.log('start');
Timer(1000).then(function(time){ --- timer(1000)이 실행이 되면(.then)
console.log('time :'+time); --- console.log('time :' + 1000) 이 실행이 됨
즉, time : 1000이 콘솔창에 출력됨
return Timer(time+1000); --- 이어서 리턴값으로 timer+1000이 주어지면서,
Timer(2000)이 실행되고
}).then(function(time){ --- .then(function(2000){
console.log('time :'+time); --- console.log('time :' + 2000)이 출력됨
return Timer(time+1000); --- 리턴 값으로 Timer(2000+1000) 즉 Timer(3000)이
주어짐
}).then(function(time){ --- 그리고 이어서 (.then) function(3000){
console.log('time :'+time); --- console.log('time :' + 3000)
console.log('end');
})
: 콘솔창에는
start
time :1000
time :2000
time :3000
end
이 순서대로 출력이 됨
* 위 코드를 async await으로 대체해서 사용하기
1) 비동기적으로 실행된다는 걸 보여주기 위해 앞에 await를 붙임 # 1
2) 결과값(즉, 파라미터<여기서는 time>를 이렇게 받을 수 있음) # 2
function Timer(time){
return new Promise(function(resolve){
setTimeout(function(){
resolve(time)
}, time)
})
}
async function run(){ --- # 1
console.log('start');
var time = await Timer(1000) --- # 2
console.log('time :'+time);
time = await Timer(time+1000);
console.log('time :'+time);
time = await Timer(time+1000);
console.log('time :'+time);
console.log('end');
}
run();