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関数は非同期を処理し、非同期は常にサーバの状態が不均一になり、エラーの要求値が容易に伝達されてエラーが発生するため、エラーがキャプチャされていないことによるアプリケーションの停止を防止するために異常処理を行う必要があります.
Reference
この問題について(Async/Await), 我々は、より多くの情報をここで見つけました
https://velog.io/@kym123123/Async-Await
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
// 성인인지 아닌지 여부와, 원하는 방 번호를 전달하는 함수
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);
});
// 성인, 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발생
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을 실행
Reference
この問題について(Async/Await), 我々は、より多くの情報をここで見つけました https://velog.io/@kym123123/Async-Awaitテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol