async
async は、ES7 で初めて導入された非同期操作に関連するキーワードで、Promise や Generator と深い関連があります。
構文
async function name([param[, param[, ... param]]]) { statements }
- name: 関数名。
- param: 関数に渡すパラメータの名前。
- statements: 関数本体のステートメント。
戻り値
async 関数は Promise オブジェクトを返すため、then メソッドを使用してコールバック関数を追加できます。
async function helloAsync(){
return "helloAsync";
}
console.log(helloAsync()) // Promise {<resolved>: "helloAsync"}
helloAsync().then(v=>{
console.log(v); // helloAsync
})
async 関数内には await 式が含まれる場合があります。async 関数の実行中に await に遭遇すると、いったん実行を一時停止し、トリガーされた非同期操作が完了するのを待ってから、async 関数の実行を再開し、解決された値を返します。
await キーワードは async function 内でのみ有効です。async function 関数の外で await を使用すると、構文エラーになるだけです。
function testAwait(){
return new Promise((resolve) => {
setTimeout(function(){
console.log("testAwait");
resolve();
}, 1000);
});
}
async function helloAsync(){
await testAwait();
console.log("helloAsync");
}
helloAsync();
// testAwait
// helloAsync
await
await 演算子は Promise オブジェクトを待機するために使用され、非同期関数 async function の内部でのみ使用できます。
構文
[return_value] = await expression;
- expression: Promise オブジェクト、または待機する任意の値。
戻り値
Promise オブジェクトの処理結果を返します。待機対象が Promise オブジェクトでない場合は、その値自体を返します。
Promise が await 演算子に渡された場合、await は Promise の正常な処理が完了するのを待ってから、その処理結果を返します。
function testAwait (x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function helloAsync() {
var x = await testAwait ("hello world");
console.log(x);
}
helloAsync ();
// hello world
通常、await の後には Promise オブジェクトを置きますが、文字列、ブール値、数値、通常の関数など他の値も指定できます。
function testAwait(){
console.log("testAwait");
}
async function helloAsync(){
await testAwait();
console.log("helloAsync");
}
helloAsync();
// testAwait
// helloAsync
await が後続の異なる式に対して行う処理は次のとおりです。
- Promise オブジェクト: await は実行を一時停止し、Promise オブジェクトの resolve を待ってから、async 関数の実行を再開し、解決された値を返します。
- 非 Promise オブジェクト: 対応する値を直接返します。