JavaScript Promiseを使うウェブの仕様を調べてみた
Promiseの仕様?
JavaScriptにおけるPromiseの仕様といえば、次期ECMAScriptのECMAScript Language Specification ECMA-262 6th Edition – DRAFTで策定されています。
このES6 Promisesについて詳しくはJavaScript Promiseの本という無料の電子書籍で書いたのでこちらを参照して下さい。
以前、Promiseについて紹介した時に以下のように書いてました。
また、今後ブラウザに実装されるAPIとしてService WorkersやStreams API等、Promiseをベースしたものも出てきています。 – JavaScript Promiseの本を書きました | Web Scratch
実際にどれくらいの仕様がPromiseを参照してるかを調べてみました。
Promiseを参照する仕様
以下のリポジトリにまとめてあります。(今後更新するかもしれないので、最新はリポジトリの方を参照)
実際に見ていくと以下のような仕様がPromiseを参照しています。
* 時期によってDOM PromiseとES6 Promiseが混ざっています(今回は両方の一覧を出しています)
Fetch Standard
Navigator interface in HTML5
http://www.w3.org/html/wg/drafts/html/master/webappapis.html#navigator
Web API Design Cookbook
http://www.w3.org/TR/api-design/
Manifest for web apps and bookmarks
http://www.w3.org/TR/appmanifest/
Battery Status API
http://www.w3.org/TR/battery-status/
CSS Font Loading Module Level 3
http://www.w3.org/TR/css-font-loading-3/
CSV on the Web: Use Cases and Requirements
http://www.w3.org/TR/csvw-ucr/
Network Service Discovery
http://www.w3.org/TR/discovery-api/
Encrypted Media Extensions
http://www.w3.org/TR/encrypted-media/
JSON-LD 1.0 Processing Algorithms and API
http://www.w3.org/TR/json-ld-api/
Web NFC API
Push API
http://www.w3.org/TR/push-api/
Quota Management API
http://www.w3.org/TR/quota-api/
Service Workers
http://www.w3.org/TR/service-workers/
Streams API
http://www.w3.org/TR/streams-api/
Web Telephony API
http://www.w3.org/TR/telephony/
WebCrypto Key Discovery
http://www.w3.org/TR/webcrypto-key-discovery/
Web Cryptography API
http://www.w3.org/TR/WebCryptoAPI/
Web MIDI API
HTML
http://www.whatwg.org/specs/web-apps/current-work/
上記の仕様で策定されてるAPIの多くは非同期処理でpromiseオブジェクトを返すようになっています。
例えば、CSS Font Loading Module Level 3では以下のようにフォントのロードが完了した時の処理をPromiseで書けるようになっています。
var f = new FontFace(
"Lobster",
"url(http://fonts.gstatic.com/s/lobster/v9/NIaFDq6p6eLpSvtV2DTNDQLUuEpTyoUstqEm5AMlJo4.woff)",
{}
);
f.load().then(function (loadedFace) {
document.fonts.add(loadedFace);
document.querySelector(".lorem").style.fontFamily = "Lobster, serif";
});
via CSS Font Loading Module Level 3を試してみた - console.blog(self);
このように、策定中の仕様も多いですが、色々な仕様がPromiseを使っています。 そのため、今後出てくるAPIを使う際にはPromiseの基本的な知識は必要になってくると思います。
どうやって調べたか
ウェブの仕様は今どこにあるのか? | Web Scratchという記事でも、色々書きましたが仕様のURLを調べるにはtobie/specrefを使うのが簡単です。
tobie/specrefからJSONで仕様の一覧(W3C,WHATWG,IETFは大体あるはず)を取得できます。 これのデータを使って仕様をまとめてダウンロードするazu/webspec-downloaderというものを書きました。
ダウンロードしたhtml等をgrepして目視でまとめました。azu/reference-promises-specにもう少し詳しく書いてあります)
tobie/specref はWeb APIとしても使えるので、 もっと色々な使い道があるかもしれません。
Web NFC APIなど最近かかれてGitHubに公開されている仕様には ReSpecというバッジが付いている事があります。 仕様の検索やチェック機能が入っていますが、これはspecrefのAPIを使って実装されています。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。