Async/Await


Async / Await


不便なスミスチェーン


promis関数を使用して宿泊予約の関数を作成し、次の関数を作成して、予約が成功したか失敗したかを決定します.
// 성인인지 아닌지 여부와, 원하는 방 번호를 전달하는 함수
const bookARoom = (isAdult, roomNumber) => new Promise((resolve, reject) => {
  console.log('hey may I help you?');
  if (isAdult) { // 성인이라면 원하는 방을 예약할 수 있고,
    resolve({
      roomNumber,
      message: 'room booked successfully!'
    })
  } else { // 성인이 아니라면 예약이 거부된다.
    reject('Unable to reserve a room due to your age!');
  }
});

// 내 예약 정보 확인하는 함수. bookARoom 함수로 부터 받은 결과인 state를 매개변수로 받는다.
const checkMyBookingState = state => new Promise((resolve, reject) => {
  console.log('checking my info...');
  resolve(state);
});
上記の関数を使って私の予約情報を実際に確認するpromisチェーンは以下の通りです.
// 성인, 303호 예약
bookARoom(true, 303).then(state => { 
  console.log(state); // {roomNumber: 303, message: 'room booked successfully!'}
  return checkMyBookingState(state); 
  // 내 방 정보 상태를 확인하기 위하여 bookARoom의 프로미스 결과값 state를 받는 checkMyBookingstate 리턴
}).then(result => console.log(result)) // {roomNumber: 303, message: 'room booked successfully!'}
  .catch(e => console.log(e)); 

// 성인 아님, 303호 예약
bookARoom(false, 303).then(state => {
  console.log(state);
  return checkMyBookingState(state);
}).then(result => console.log(result))
	.catch(error => console.log(error)); // Unable to book a room due to your age!
// 성인이 아니므로 거부되며 error발생
2つの非同期関数しかなく、可読性がよくなく、不便です.returnを使用して他のプロセスオブジェクトを渡し、catchなどの後続の処理方法を使用してチェーンを形成して実行する必要があります.JavaScriptは、これらの欠点を補うasync/awaitメソッドを提供します.

Usage of Async / Await


以下に示すように、PromisではなくAsync/Awaitを使用して、上記のPromisチェーンコードを再作成します.
const book = async () => {
  try {
  const state = await bookARoom(true, 303);
  console.log(state); // {roomNumber: 303, message: 'room booked successfully!'}
  const result = await checkMyBookingState(state); // bookARoom의 결과 state를 전달후 함수 실행
   console.log(result); // checking my Info...
    // {roomNumber: 303, message: 'room booked successfully!'}
  } catch (error) {
    console.log(error)
  }
};

book(); // 비동기 함수 book을 실행
上記で定義したプロセスの非同期関数bookAroomを返します.
checkMyBokkingState関数をasyncキーワード付きbook関数内で実行させるだけです.promisを返す非同期関数の前にawaitキーワードを付けなければならないことに注意してください.貼り付けない場合、BookAroom関数の実行結果値stateは、解析値{roomNumber: 303, message: 'room booked successfully!'}ではなくpromisオブジェクト自体を返します.この値をパラメータとして次の関数checkMyBookingStateに渡すと、希望するサブスクリプションのステータスを特定できません.
awaitキーワードを使用して、解析された値である目的の値を取得します.
またasync関数では,接尾辞法を用いて異常を処理する.catch()ではなく同期処理に使用されるtry...catch文を使用して例外処理を行うことができます.
async関数は非同期を処理し、非同期は常にサーバの状態が不均一になり、エラーの要求値が容易に伝達されてエラーが発生するため、エラーがキャプチャされていないことによるアプリケーションの停止を防止するために異常処理を行う必要があります.