async, await
- Promiseをより直感的に使用する目的で作成された
- ES8以上
async
Promiseを返却する関数の宣言を行う。
- 関数の先頭にasyncと書くとPromiseを返却することが担保されている。
- グローバルコンテキストでは使用できない。関数コンテキストで使用する。
await
Promiseを返却する関数の非同期処理が完了するまで待つ。
case
-
Promiseチェーンもより簡単に書けるようになる。
-
init()関数でsleep関数を実行する。
- asyncは実行する関数が非同期で実行されることを明示している。使用しないとエラーになる。
- awaitはresolveで受け取る引数valを受け取ることになる。
- すなわちawaitで受け取るのはPromiseのインスタンス
- 引数valをもつsleep関数でPromiseを実行
- setTimeoutで1秒後にresoleve,valをインクリメント
function sleep(val) {
return new Promise(function(resolve) {
setTimeout(function() {
console.log(val++);
resolve(val);
}, 1000);
});
}
async function init(){
let val = await sleep(0)
val = await sleep(val)
val = await sleep(val)
val = await sleep(val)
}
init();
>>> 0
>>> 1
>>> 2
>>> 3