Microsoft が提供する Edge ブラウザにて、来るべき ES 2016 の機能である async/await が利用可能となった。同機能は未だプレビュービルドでの実験的な試みだが、同機能の存在は広域な普及に向けての重要な一歩となる。
JavaScript 固有の非同期実装は強力だが、単純な処理の場合でも開発者には過剰なコードを書く負担を強いていた。"Callback 地獄" は JavaScript 開発者が苦笑いしながら頷くジョークだ。近年の開発者は、非同期コードを書くより良い手段として Promise を取り入れている。Promise は十分に進化しており、ES6 仕様の一部となっている。
async/await 機能は Promise からさらに改善しており、従来の Promise でコールバック群を連携させるために必要なコードを排除することができる。関数 getJsonAsync
における一例として、Promise を返すがasync/await を利用した場合、より非同期な形式で Promise を利用したものと同様のコードを記載できる。
async function getServerData() {
try {
// Once the promise is resolved, the value is returned
var json = await getJsonAsync();
}
catch (e) {
// If the promise is rejected, the result ends up in the catch block
}
}
C# 開発者は C# 5.0 で導入された async/await と似た構文であることに気づくだろう。C# では非同期的なコードは非同期的な作法で記載することが可能であり、過剰なコードでつなぎ合わせることは不要だ。同様に、JavaScript における async/await は定型的なコード量を削減する素敵な機能だ。
同機能は Windows Insider プログラムにおける build 10547 で利用可能だ。ウィンドウに about:flags
を入力し、" 試験的な JavaScript 機能を有効にする " フラグを有効化する。
現在のところ、他のブラウザで同機能は利用できない。Babel Transpiler が 実験機能として async/await をサポートしている。他のブラウザがサポートするのはそう遠くはないだろう。Mozilla は現在取組中だ。
ブラウザへの実装は ECMAScript 標準化プロセスへの必要なステップだ。async/await は現在ステージ 3 であり、"Candidate" となっている。最終ステージである 4 になるためには、実装が必要となる。async/await の大御所である Brian Terlson 氏は、今年の QCon New York で同件と TC39 ES2016 プロセスについて言及している。