ES 6(7)のAsyncとawait
1661 ワード
まずJavaScriptの非同期処理について話します.
JavaScriptは単一スレッドのプログラミング言語であり、非同期処理の仕組みを設計しないと、時間が長いI/Oのためにスレッドが詰まりやすくなり、悪いプログラム体験ができます.
以前に非同期処理を行う方法:
コールバック関数:いくつかのイベントのコールバック関数を設定することで、非同期処理が可能です.
イベント傍受:イベント傍受は基本的にコールバック関数のサポートに基づいています.
リリース/購読:購読を発表するのは良い設計モードで、発表者のイベントを監督して非同期処理を達成します.
Promiseオブジェクト:Promiseオブジェクトは関数のフィードバックの入れ子を解決できますが、コードの横方向発展(チェーン操作の弊害)を招きます.
ES 7のAync
Asyncは、関数の前に設定されたキーワードで、
いくつかの長所関数は、良好な縦 になります.コードは同期コードのように見える です.は、標準的な を行うことができる.
JavaScriptは単一スレッドのプログラミング言語であり、非同期処理の仕組みを設計しないと、時間が長いI/Oのためにスレッドが詰まりやすくなり、悪いプログラム体験ができます.
以前に非同期処理を行う方法:
コールバック関数:いくつかのイベントのコールバック関数を設定することで、非同期処理が可能です.
イベント傍受:イベント傍受は基本的にコールバック関数のサポートに基づいています.
リリース/購読:購読を発表するのは良い設計モードで、発表者のイベントを監督して非同期処理を達成します.
Promiseオブジェクト:Promiseオブジェクトは関数のフィードバックの入れ子を解決できますが、コードの横方向発展(チェーン操作の弊害)を招きます.
ES 7のAync
Asyncは、関数の前に設定されたキーワードで、
await
は、async
作用領域でのみキーワードを使用することができ、Promise
オブジェクトを傍受することができ、Promise
オブジェクトの状態が変化したときに、後のコード操作が行われる.いくつかの長所
try
およびcatch
動作 //sleep
var sleep = function (time) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
reject() // time Promise reject
}, time);
})
};
let hello = async() => { //async
try {
console.log('i am 1')
await sleep(3000)
console.log(`this won't happen`)
} catch (err) {
console.log('i am 3')
}
}
hello()
console.log('i am 2')
sleep
は遅延関数であり、呼び出し時は3000
ms後にPromise
オブジェクトの状態が変化するので、try
のスコープ内ではconsole.log('i am 1')
を実行した後に3000
ms待っていますが、async
スコープのコードは順次下に実行され、console.log('i am 2')
ms後に3000
msが実行されます.Promise
オブジェクトの状態がreject
に変化した場合、catch
によって検出されるので、try
の中のコードは再実行されず、catch
の下のコードが実行される.