--- title: await slug: Web/JavaScript/Reference/Operators/await tags: - Function - JavaScript - Language feature - Operator - Primary Expression translation_of: Web/JavaScript/Reference/Operators/await ---
{{jsSidebar("Operators")}}

await 演算子は、{{jsxref("Statements/async_function", "async function")}} によって {{jsxref("Promise")}} が返されるのを待機するために使用します。

構文

[rv] = await expression;
expression
解決を待つ {{jsxref("Promise")}} もしくは何らかの値。
rv

解決された promise の値。expression が Promise ではない場合はその値自体を返す。

説明

await 式は async function の実行を一時停止し、Promise の解決または拒否を待ちます。解決した後に async function の実行を再開します。再開するときに await 式は解決された Promise にラップされた値を返します。

Promise が拒否された場合、await 式は理由となった値を投げます。

await 式に続く値が Promise ではなかった場合、解決された Promise に変換されます。

await は実行フローを分割できるため、await の関数の呼び出し元は、await の関数の遅延継続の前に実行を再開できます。await がその関数の継続を延期した後、これが関数によって実行される最初の await でれば、await の関数の完了を求める保留中の Promise を関数の呼び出し元に返し、その呼び出し元の実行を再開することによって、即時実行も続行されます。

promise の解決を待つ

Promiseawait 式で停止された場合、Promise が解決されて、解決された値を返すのを待ちます。

function resolveAfter2Seconds(x) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
}

async function f1() {
  var x = await resolveAfter2Seconds(10);
  console.log(x); // 10
}

f1();

Thenable オブジェクト

{{jsxref("Global_Objects/Promise/then", "Thenable オブジェクト")}}もまったく同じように実行されます。

async function f2() {
  const thenable = {
    then: function(resolve, _reject) {
      resolve('resolved!')
    }
  };
  console.log(await thenable); // resolved!
}

f2();

Promise への変換

値が Promise でない場合は、値を解決済みの Promise に変換して待ちます。

async function f3() {
  var y = await 20;
  console.log(y); // 20
}

f3();

Promise の拒否

Promise が拒否された場合、拒否された値が投げられます。

async function f4() {
  try {
    var z = await Promise.reject(30);
  } catch(e) {
    console.error(e); // 30
  }
}

f4();

拒否された Promise を処理する

拒否された Promisetry 文を使用せずにエラーハンドリングを行えます。

var response = await promisedFunction().catch((err) => { console.error(err); });
// response will be undefined if the promise is rejected

仕様

仕様書
{{SpecName("ESDraft", "#sec-async-function-definitions", "async functions")}}

ブラウザー実装状況

{{Compat("javascript.operators.await")}}

関連情報