JavaScript Promiseの本 v2リリース、ES2015+に対応、Async Functionの章を追加
JavaScriptのPromiseについて学ぶ書籍であるJavaScript Promiseの本 v2をリリースしました。
Promise本 1.0.0をリリースしたのは2014年6月ですが、そこから少しづつアップデートしていました。
今回のメジャーアップデートとなる2.0.0では、サンプルコードのコードベースをES2015前提のものへと変更しています。 1.x系からの主な変更点としては次のものがあります。
ES6
をES2015
に表記を変更- コードベースをES5からES2015+(ES2015以降ベース)に変更
- Async Functionの章を追加
- Promise#finallyの対応
v2の変更点
Promise本 v2の主な変更点は次の通りです。
コードベースをES5からES2015+に変更 #249 #323
(Promise以外は)ES5ベースだったサンプルコードをES2015ベースにすべて書き換えました。 そのため、サンプルコードにもES2015の構文を使っています。
- Arrow Function
const
class
- Async Function(ES2017、章として追加)
変更理由としては、ES2015のほうが簡潔に書ける部分(class
を使ったDeferred
など)があることや、
var
よりもconst
やlet
の利用を促す傾向が全体的にあるためです。
ES2015の基本的な文法に不安がある方は、ES2015ベースのJavaScript入門書であるJavaScript Primerも作成しているので、併せて読んでみてください。
- JavaScript Primer
- 付録: JavaScriptチートシートで構文から逆引きできます
また、サンプルコードがES5のものを読みたい場合はPromise本 v1のアーカイブも作成してあるので、こちらを参照してください。
Async Functionの章を追加 #246 #317
新しい章として5. Chapter.5 - Async Functionを追加しました。
Async Function(async
とawait
)はES2017で追加された新しい非同期処理に関する構文です。
ただし、Async Functionの内部的な処理にはPromiseが大きく関係しています。
そのため、Async FunctionとPromiseのどちらかを使えば良いという話ではなく、Async FunctionとPromiseは共存する関係にあります。
この章では、Async Functionの基本的な使い方から典型的なユースケースなどを見ていきます。
Async Generatorについては触れていないため、この辺は今後の課題です。 (そもそもGeneratorについて触れてない)
Promise#finallyの対応 #284 #294
ES2018からPromiseチェーンの最後の処理を簡潔に書けるPromise#finally
メソッドが追加されました。
その解説を2.6. Promise#finallyに追加しています。
その他
寄付手段としてGitHub Sponsorsを追加
寄付の手段としてJavaScript Promiseの本 付録を好きな値段をつけて購入する以外にも、GitHub Sponsorsでの寄付を追加しました。
Promise本専用のプランは特に用意してませんが、何か希望があったら言ってください。
HTTPS
ウェブサイトが https://azu.github.io/promises-book/ のように https になっています。
Fetch APIとAbortController
PromiseベースのAPIであるFetch APIやキャンセル処理であるAbortControllerについても簡単に触れています。
本文はXHRをラップしたfetchURL
ベースで話を進めていますが、この処理も少しだけFetch APIに寄せています。(もともとはgetURL
という名前だった。fetch get + res.ok + res.text()のイメージ)
DocTest
内部的にpower-doctestを使ったテストを一部に取り入れました。
- azu/power-doctest: JavaScript Doctest for JavaScript, Markdown and Asciidoc.
- MarkdownやAsciidoc中に書いたJavaScriptのサンプルコードをdoctestするツールを作った | Web Scratch
CONTRIBUTING.mdにもDocTestについてを追加しました。 コントリビューション待ってます!
今後の予定
JavaScript Promiseの本は、次のような目的で書かれています。
この書籍を読むことで学べる事として、次の3つを目標にして書きました。
Promiseについて学び、パターンやテストを扱えるようになる事 Promiseの向き不向きについて学び、何でもPromiseで解決するべきではないと知る事 ECMAScript6 Promiseの基本をよく学び、発展した形を自分で形成できるようになる事
基本的には今もこれは変わってなくて、Promiseで迷ったときにここ見ればとりあえずわかるようなものを目指しています。 また、ECMAScriptの仕様が今も更新され続けているようにPromiseやAsync Function周りもまだ仕様が変更され続けています。
書籍を見ればわかるものを作るためには、書籍もそれに追従できるような仕組みになっていないとできません。
こういう形態で書籍を公開したのは、常に書籍が更新出来るようにしたいからでもあります。
– JavaScript Promiseの本を書きました | Web Scratch
JavaScriptにおけるPromiseは、まだAPIが不十分なところがあるため、APIが拡張されています。
直近のものとしてはPromise.allSettled
はES2020で入ることが確定(Stage 4)であるため、対応が必要になりそうです。
- Promise.allSettled (ES2020) · Issue #330 · azu/promises-book
- Promise.any · Issue #335 · azu/promises-book
- Promise.try · Issue #283 · azu/promises-book
またAsync Functionに関しては他の構文に対しても組み込まれているため、変更の幅が広いです。 例えば、Dynamic Importにも非同期が関係しているため、その辺と関連した内容が必要になるかもしれません。
このような変更に対応していくためにも、Promise本ではコミッターを募集しています。 Promise.allSettled (ES2020) · Issue #330 · azu/promises-bookは、やることが大体決まっているので手が出しやすいかもしれません。興味ある人は一緒に進めましょう。
書籍もライブラリのように途中でメインのメンテナーが変わってもいいはずなので、そのような形にできたほうが更新が続けられるんじゃないかなと思います。
- azu/promises-book: JavaScript Promiseの本
- リポジトリはこちら
Promise本の細かい書き方とかはCONTRIBUTING.mdにあるので、興味がある人は見てみてください。 (js-primerに比べれば、結構勢いで書いてる部分も多いのでざっくりしたガイドラインです)
他にもサンプルコードが古いままだったり、間違いもあるかもしれないので、そういうのを見つけたらIssueを立てたり、Pull Requestをだしてみてください!
おわりに
JavaScript Promiseの本 v2の詳細な変更についてはリリースノートを参照してください。
また@laco2netと一緒に書いてるJavaScript Primer #jsprimerの方も現在書籍化に向けて最終的な調整をしている段階です。 書籍として出版されたときに通知を受け取りたい人は、Topページにあるメールフォームからメールアドレスを登録しておけばリリース時に通知されます。
- js-primer/meetings at master · asciidwango/js-primer
- JavaScript Primerのミーティングログ
- asciidwango/js-primer: JavaScriptの入門書 - JavaScript Primer
- JavaScript Primerのリポジトリ
JavaScript Promiseの本 v2のリリースにあわせてGitHub Sponsorsの募集ページも公開してみたので、興味がある人は見てみてください。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。