JavaScriptのasync/awaitはPromiseの糖衣構文か

commits1 min read読了の目安(約400字

Q. JavaScriptのasync/awaitはPromiseの糖衣構文か?

A. 糖衣構文ではありません。

Q. なぜ?

A. async function構文で作られた関数オブジェクトに対してFunction.prototype.toStringメソッドを呼び出すと、async functionで始まる文字列が得られます。これはPromiseだけでは不可能で、async function構文を用いないと不可能です。

async function foo() {}
// "async function foo() {}"
console.log(Function.prototype.toString.call(foo)); 

※ここでは糖衣構文は「その構文を使ったプログラムをその構文を使わない同じ意味のプログラムに常に書き換えられるような構文」と定義しています。

Q. だから何?

A. さあ……