JavaScript Promiseの本をES2015+に改定したv2へのメジャーアップデートです。
変更点
Promise本 v2の主な変更点は次の通りです。
コードベースをES5からES2015+に変更 #249 #323
(Promise以外は)ES5ベースだったサンプルコードをES2015ベースにすべて書き換えました。
そのため、サンプルコードにもES2015の構文を使っています。
- Arrow Function
- Async Function(章として追加)
const
class
変更理由としては、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#finllayの対応 #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についてを追加しました。
コントリビューション待ってます!
CHANGELOG
最後に細かいものも含めた変更点の一覧です。
Minor Changes
- コードベースをES5からES2015+に変更 #249 #323
- Async Functionの章を追加 #246 #317
- Promise#finllayの対応 #284 #294
- jQuery 3.0 対応#241
- jsprimerとの連動 #289
-
getURL
をfetchURL
にリネーム #310 - Unhandled Rejectionの追記 #253
- ウェブサイトをhttpsへの移行 #290
- v1のアーカイブを作成 #325
- AbortControllerへの言及 #259 #336
- Fetch APIについて言及 #295 #334
Commitベースの変更点
Fixes
- /json/book.jsonでfetchエラーになるので絶対パスに変更 (#306) (b152f03)
- ES6 -> ES2015 (#316) (089f94f)
- fix error message (44e7193)
- ch1: E言語のリンク切れ対応 (4a4f9a8)
- ch5: fix example (8916d1c)
- ch5: fix header level (5c7d8ed)
- ch5: fix log (b39be92)
- ci: use yarn (bec1be9)
- deps: update dependencies (9ed5f2e)
- lib: fix typo (19b5eea)
- library: fix babel link (78993fb)
- polyfill: use core-js instead of native-promise-only (83b3200)
- promise-finally: コード例を修正 (d596921)
- promise-library: polyfillライブラリの変更 (#301) (2112658)
- promise-rance: fix typo (5761e73), closes #281
- test: fix gulp html-lint (54bf0d9)
- website: use https (#311) (a352361)
- IE10 -> IE (62f86ec)
- test: implement echo-server (8c65c3f)
Features
- archives: add v1 archives (#313) (954c0d3)
- Ch0: jsprimerへの言及を追加 (#300) (7aef75d)
- ch2: Promise#finally (33b87dc)
- ch2: Promise#finallyのチャプターを追加 (cec882a)
- Ch3: add assert.rejects (27e0f32), closes #315
- Ch4: FetchとAbortControllerを追加 (#336) (e610c89)
- Ch4: util.promisifyと.promisesについてを追加 (#337) (ae5f7e7)
- Ch4: クラス構文の補足を追加 (#329) (e8739cb)
- Ch5: Fetch APIの解説を補足 (#334) (0adf34c)
- add async function (#317) (1265463)
- アーカイブリンクを追加 (#327) (1851868)
- Ch5: Async Functionの章 (b3d81db)
- index: add Chapter 5 (4f8cfcb)