앞서 배운 callback함수와 promise가 있었는데요.기존의 비동기 처리방식인 callback함수와 promise의
단점을 보완하고 개발자가 읽기 좋은 코드로 작성할수 있게 도와줍니다.
function p() {
return new Promise((resolve, reject) => {
resolve('hello');
// or reject(new Error('error');
});
}
p().then((n) => console.log(n));
async function p2(){ // async을 지정해주면 Promise를 리턴하는 함수로 만들어줍니다.
return 'hello';
}
p2().then((n) => console.log(n));
async 를 사용하면 promise 코드를 나타낼 수 있습니다.
함수에 async만 붙이면 자동으로 promise 코드를 인식되고, return 값은 resolve()와 동일합니다.
async function 함수명() {
await 비동기_처리_메서드_명();
}
function() 앞에 async 를 작성할 것.await를 작성할 것.await의 대상이 되는 비동기 처리 코드는 Axios등 프로미스를 반환하는 API 호출 함수이를 응용하여 코드 예시를 보자면,
async function sendTokenToSMS(myphone, result){
const SMS_KEY = process.env.SMS_KEY;
const SMS_SECRET = process.env.SMS_SECRET;
const SMS_SENDER = process.env.SMS_SENDER;
const messageService = new mysms(SMS_KEY, SMS_SECRET)
const res = await messageService.sendOne({
to: myphone,
from: SMS_SENDER,
text:`[코드캠프] 안녕하세요?! 요청하신 인증번호는 ${result}입니다!`
})
sendTokenToSMS()함수는 promise 객체를 반환하는 함수입니다.여기에 async / await 함수를 사용하지 않았다면 res 함수에 messageService 를 받기 전에 이미 빈 페이지가 전송이 되었을 것입니다.비동기에 대한 사고를 방지한 거라고 볼수 있습니다.
promise 객체에서 에러 처리를 위해 catch() 를 사용한거 처럼 async에서는 try catch 방법이 있습니다.
then(),catch()를 이용하여 처리하는 방법도 있습니다.
let myPromise = new Promise((resolve, reject) => {
setTimeout(function(){
resolve("Success!");
}, 250);
});
//.then .catch
myFirstPromise
.then((successMessage) => {
console.log("true! " + successMessage)})
.catch((errorMessage) => {
console.log("false! " + errorMessage)})
})
promise에서 resolve (성공)이 실행될 시, then 이 실행되고,
reject(실패)이 실행될 시에는 catch문이 실행됩니다.
try{
...//(코드)
}catch(err){
...//(에러 핸들링)
}
우리 환경에 있어서 비동기 처리방식이 거의 모든 부분을 차지 하고있지만 그만큼 더 편리하고 에러가 없게 하기 위해 편리한 코드들이 많은거 같다.아직까지 공부할 부분이 많다. 더 많이 보고 연습해 보는 시간을 가져야겠다.