[JavaScript] async/awaitのawaitはなぜwaitではないのか?

2024/09/18

author

masyus

JavaScriptの非同期処理にはasync/awaitという書き方があることはみなさんよくご存知だと思います。ただ、私たちにとって英語で「待つ」を意味する馴染み深い単語はwaitかと思います。awaitも「待つ」を意味する英単語であり、waitとawaitは意味が同じですが、なぜawaitが使われているのか私自身よく知らなかったため、今回記事にしました。

waitとawaitは自動詞か他動詞かの違い

辞書検索してみたところ、waitawait自動詞か他動詞かの違いであることが分かりました。どちらも「待つ」という意味は一緒ですが、wait自動詞await他動詞です。

もう少しユースケースに沿って解説しますと、

  • wait: 自分がただ単純に待つ場合
  • await: 自分が明確に<目的語>を待つ場合

という違いがあります。

JavaScriptにおけるawaitの書き方を見てみる

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

async function asyncCall() {
  console.log('calling')
  const result = await resolveAfter2Seconds()
  console.log(result)
  // Expected output: "resolved"
}

asyncCall();

上記のサンプルコードにおいて、awaitを書いた後は必ずその後ろに何の処理を待つかを記述します。つまり

目的語を必要とする書き方になっている

わけです。明確に何の処理を待つかを記述する文法のため、waitではなくawaitが適切であるのは間違いないでしょう。

余談: syncとasyncの違い

こうしてみると

「実はsyncasyncも似たような関係なのか?」

と一瞬思いますが、ちゃんと調べてみましょう。言葉の意味としては

  • sync: synchronous(同期)
  • async: asynchronous(非同期)

にそれぞれ割り当てられます。こちらは言葉の意味から明確に異なります。asyncawaitは先頭が同じaで、一見するとこのaは意味合いが同じなのかと錯覚しますが、全く関係ありません。紛らわしい感じはありますが注意しましょう。

参考