비동기 개발시 , 순차적 비동기 처리를 위해 promise 를 사용하지만 좀 더 간편하게 처리하기 위해 aysnc , await ( with Promise) 에 대해 알아보자
[ async & await = 프로미스 다른점] – async 로 만들어진 함수는 그안의 처리들을 모두 promise 만든다. – resolve(value) 콜백은 – return value 로 처리 – reject (new Error()) 은 throw new Error(…); 로 처리 (try ~ catch)
async function 함수명()
{ ‘ async 로 지정한 함수안에 코드들은 모두 자동으로 promise로 감싸진다. ‘
}
[Promise 로 만들어진 비동기 함수] ———————————————————————————————–
function getData() {
return new Promise( (resolve) =>
{
setTimeout(() =>
{
resolve(“{1,2,3,4,5}”);
} , 2000)
});
}
let gData = getData();
console.log(gData); // 비정상 Promise {<fulfilled>: ‘{1,2,3,4,5}’} getData().then( data => console.log(data)) // 정상 {1,2,3,4,5} resolve ~ then
[async 로 만들어진 비동기 함수] ———————————————————————————————–
function getData()
{
return new Promise( (resolve) =>
{
setTimeout(() =>
{
resolve(“{1,2,3,4,5}”);
} , 2000)
});
}
(asyncfunction(){ // 함수선언과 동시에 실행 await aync 함수안에서만 실행 가능하므로
let gData3 = awaitgetData();
console.log(gData3); // 3초 뒤 정상 출력 {1,2,3,4,5}
})();
[ asycn & await ]
1) 비동기 함수를 호출을 포함할 함수를 async 함수로 지정하고, 2) 비동기 함수를 호출할때 동기화 하기위해 await 를 지정한다. 3) await로 지정한 함수는 비동기 함수로 promise 로 작성되어 있어야 한다. 4) async 함수로 지정해야 await 를 사용할 수 있다.
// no1 ,no2 ,no3 의 실행 값들이 순서에 따라 서로에게 영향을 미치지 않는다면 // 위 보다 간단하게 병렬처리가 가능하다.
[Promise.All]
// 병렬처리를 원하는 , 프로미스를 리턴하는 함수를 나열하여 결과를 함수 호출 자리에 배열로 그대로 받음 // all , resolve , race 모두 static 함수역할을 하므로 new 를 붙이지 않음 // getNumber1() , getNumber2() , getNumber3() 함수들은 promise로 만들지 안았지면 async function 이므로 // 묵시적으로 promise 로 리턴함 용법 : return Promise.all( [ 함수1 , 함수2, 함수3, 함수4, 함수5 ]);