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 オブジェクト: 対応する値を直接返します。