[JavaScript] async/awaitのawaitはなぜwaitではないのか?
2024/09/18
masyus
JavaScriptの非同期処理にはasync/await
という書き方があることはみなさんよくご存知だと思います。ただ、私たちにとって英語で「待つ」を意味する馴染み深い単語はwait
かと思います。await
も「待つ」を意味する英単語であり、waitとawaitは意味が同じですが、なぜawaitが使われているのか私自身よく知らなかったため、今回記事にしました。
waitとawaitは自動詞か他動詞かの違い
辞書検索してみたところ、wait
とawait
は自動詞か他動詞かの違いであることが分かりました。どちらも「待つ」という意味は一緒ですが、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の違い
こうしてみると
「実はsyncとasyncも似たような関係なのか?」
と一瞬思いますが、ちゃんと調べてみましょう。言葉の意味としては
- sync: synchronous(同期)
- async: asynchronous(非同期)
にそれぞれ割り当てられます。こちらは言葉の意味から明確に異なります。async
とawait
は先頭が同じaで、一見するとこのaは意味合いが同じなのかと錯覚しますが、全く関係ありません。紛らわしい感じはありますが注意しましょう。