ES 2017の新機能:asyncとawait
21965 ワード
この文章はアルバート・モントラー市のモダン・JavaScriptコアガイドに基づいて書かれた.
ES 2017は、
プロセスの再表示
新しい構文を理解する前に、「プロセス」を使用する一般的な方法を簡単に振り返ってみましょう.
もう一つの例を見てみましょう.
aync/await
次のコードを見てください.非同期関数を作成するには、 このキーワードは、JavaScriptが常にプロセスを返すことを示します. 非同期関数で非プロセスを返す値を作成すると、JavaScriptは自動的にその値をプロセスとして返します. 名前に示すように、 非同期関数で
エラー処理
一般に、
ES 2017は、
async/await
キーワードを使用する新しいプロセス動作方式を導入した.プロセスの再表示
新しい構文を理解する前に、「プロセス」を使用する一般的な方法を簡単に振り返ってみましょう.
// 깃허브 사용자 정보 조회
fetch("https://api.github.com/users/AlbertMontalesi")
.then((res) => {
// 응답을 json형식으로 반환
return res.json();
})
.the((res) => {
// 성공 시 데이터를 출력
console.log(res);
})
.catch((err) => {
// 실패 시 오류 출력
console.log(err);
});
これは非常に簡単なプロセスコードであり、羽集線器APIを使用して羽集線器ユーザーに関する情報を取得し、コンソールに出力します.もう一つの例を見てみましょう.
function walk(amount) {
return new Promise((resolve, reject) => {
if (amount < 500) {
reject("the value");
}
setTimeout(() => resolve(`you walked for ${amount} milliseconds`), amount);
});
}
walk(1000)
.then((res) => {
console.log(res);
return walk(500);
})
.then((res) => {
console.log(res);
return walk(700);
})
.then((res) => {
console.log(res);
return walk(800);
})
.then((res) => {
console.log(res);
return walk(100);
})
.then((res) => {
console.log(res);
return walk(400);
})
.then((res) => {
console.log(res);
return walk(600);
});
// you walked for 1000 milliseconds
// you walked for 500 milliseconds
// you walked for 700 milliseconds
// you walked for 800 milliseconds
// uncaught exception: the value is too small
これは簡単な流れで、特に説明はありません.次に、async/await
構文を使用してこの例を再記述するプロセスを見てみましょう.aync/await
次のコードを見てください.
function walk(amount) {
return new Promise((resolve, reject) => {
if (amount < 500) {
reject("the value");
}
setTimeout(() => resolve(`you walked for ${amount} milliseconds`), amount);
});
}
async function go() {
// 프로미스가 완료될 때까지 기다리기 위해 await 키워드를 사용
const res = await walk(500);
console.log(res);
const res2 = await walk(900);
console.log(res2);
const res3 = await walk(600);
console.log(res3);
const res4 = await walk(700);
console.log(res4);
const res5 = await walk(400);
console.log(res5);
console.log("finished");
}
// you walked for 500 milliseconds
// you walked for 900 milliseconds
// you walked for 600 milliseconds
// you walked for 700 milliseconds
// uncaught exception: the value is too small
このサンプルコードを1つずつ分析してみましょう.async
キーワードを関数の前に付ける必要があります.await
キーワードは非同期関数でのみ動作します.await
キーワードはJavaScript待機プロセスの結果を示す.await
を使用しようとすると、何が起こったかを確認します.// 일반 함수에서 await을 사용한 경우
function func() {
let promise = Promise.resolve();
let result = await promise;
}
func();
// SyntaxError: await is only valid in async functions and async generators
// 코드 최상위 레벨에서 await을 사용한 경우
let response = Promise.resolve();
let result = await response;
// SyntaxError: await is only valid in async functions and async generators
覚えておいてください.await
非同期関数でのみ使用可能エラー処理
一般に、
.catch()
を使用して、プロセスによって返されるエラーを処理します.async/await
文法を使ってもあまり違いはありません.async function asyncFunc() {
try {
let response = await fetch("your-url");
} catch (err) {
console.log(err);
}
}
asyncFunc();
// TypeError: failed to fetch
通常はtry ...catch
構文を使用してエラーを処理しますが、この構文を使用しなくても次のエラーを処理できます.async function asyncFunc() {
let response = await fetch("your-url");
}
asyncFunc();
// Uncaught (in promise) TypeError: Faild to fetch
asyncFunc().catch(console.log);
// TypeError: failed to fetch
Reference
この問題について(ES 2017の新機能:asyncとawait), 我々は、より多くの情報をここで見つけました https://velog.io/@tmpks5/ES2017의-새로운-기능-async와-awaitテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol