Skip to content

Commit

Permalink
fix: ES6 -> ES2015 (#316)
Browse files Browse the repository at this point in the history
* fix: ES6 -> ES(ECMAScript)

* fix: ES6 -> ES(ECMAScript)

* fix
  • Loading branch information
azu authored Aug 24, 2019
1 parent 26b272e commit 089f94f
Show file tree
Hide file tree
Showing 15 changed files with 48 additions and 45 deletions.
10 changes: 5 additions & 5 deletions Appendix-Glossary/glossary.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@ Promises::
プロミスという仕様そのもの
promiseオブジェクト::
プロミスオブジェクト、`Promise` のインスタンスオブジェクトのこと
[[es6-promises]]
ES6 Promises::
http://www.ecma-international.org/ecma-262/6.0/index.html[ECMAScript 6th Edition(ECMAScript 2015)] を明示的に示す場合にprefixとして _ES6_ をつける
[[es-promises]]
ES Promises::
https://tc39.es/ecma262/[ECMAScriptの仕様] を明示的に示す場合にprefixとして _ES_ をつける
[[promises-aplus]]
Promises/A+::
http://promises-aplus.github.io/promises-spec/[Promises/A+]のこと。
ES6 Promisesの前身となったコミュニティベースの仕様であり、ES6 Promisesとは多くの部分が共通している。
ES Promisesの前身となったコミュニティベースの仕様であり、ES Promisesとは多くの部分が共通している。
[[Thenable]]
Thenable::
Promiseライクなオブジェクトのこと。
`.then` というメソッドをもつオブジェクト。
[[promise-chain]]
promise chain::
promiseオブジェクトを `then` や `catch` のメソッドチェーンでつなげたもの。
この用語は書籍中のものであり、<<es6-promises,ES6 Promises>>で定められた用語ではありません。
この用語は書籍中のものであり、<<es-promises,ES6 Promises>>で定められた用語ではありません。
13 changes: 8 additions & 5 deletions Appendix-Glossary/resource-link.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,21 @@

https://github.com/w3ctag/promises-guide[w3ctag/promises-guide] link:++https://triple-underscore.github.io/promises-guide-ja.html++[(日本語訳)]::
Promisesのガイド - 概念的な説明はここから得たものが多い

https://github.com/domenic/promises-unwrapping[domenic/promises-unwrapping]::
ES6 Promisesの仕様の元となったリポジトリ - issueを検索して得た経緯や情報も多い
ES Promisesの仕様の元となったリポジトリ - issueを検索して得た経緯や情報も多い

http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise-objects[ECMAScript 2015 Language Specification – ECMA-262 6th Edition]::
ES6 Promisesの仕様書 - 仕様書として参照する場合はこちらを優先した
ECMAScript 2015におけるPromiseの仕様書 - PromiseはES2015で導入された

https://tc39.es/ecma262/[ECMAScript® Language Specification]::
ECMAScriptの仕様書 - 最新の仕様

http://www.html5rocks.com/ja/tutorials/es6/promises/[JavaScript Promises: There and back again - HTML5 Rocks]::
Promisesについての記事 - 完成度がとても高くサンプルコードやリファレンス等を参考にした

http://d.hatena.ne.jp/jovi0608/20140319/1395199285[Node.jsにPromiseが再びやって来た! - ぼちぼち日記]::
Node.jsとPromiseの記事 - __thenable__について参考にした

http://exploringjs.com/[Exploring ES6: Upgrade to the next version of JavaScript]::
ECMAScript 6全般について詳しく書かれている書籍
https://exploringjs.com/[Exploring JS: JavaScript books for programmers]::
ECMAScript全般について詳しく書かれている書籍
4 changes: 2 additions & 2 deletions Appendix-Note/beginning-story.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
この書籍を書くことにしたのは、私自身が運営する JSer.info にて、
http://jser.info/post/77696682011/es6-promises[あなたが読むべきJavaScript Promises | JSer.info] という記事を書いたことが始まりです。

この記事を書く際にECMAScript 6 Promisesについて色々調べながら書いていましたが、
この記事を書く際にECMAScript Promisesについて色々調べながら書いていましたが、
最終的に扱いきれてない情報もありました。

- https://github.com/azu/jser.info/pull/17[あなたが読むべきPromises by azu · Pull Request #17 · azu/jser.info]
Expand All @@ -31,7 +31,7 @@ The little book of Buster.JS を書いた時からサンプルコードにテス
また、Asciidocのモダンな処理エンジンとして http://asciidoctor.org/[Asciidoctor] という実装があることを知り、
これを使ってみようと思いました。

まとめると、主目的は電子書籍を書いてみたいという欲求で、サブ目的がES6 Promisesについて扱いきれなかったものを書く
まとめると、主目的は電子書籍を書いてみたいという欲求で、サブ目的がES Promisesについて扱いきれなかったものを書く
というのがこの書籍を書き始めた理由です。

== 書き始めのワークフロー
Expand Down
2 changes: 1 addition & 1 deletion Appendix-Note/tooling-ci.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ image::img/javascript-console-editor.png[コンソールエディタの図]

サンプルコードはNode.js上で動くものとして作り、Node.jsで動くテストを書いた。

<<es6-promises,ES6 Promises>>はDOMではなくECMAScriptの仕様であるため、
<<es-promises,ES6 Promises>>はDOMではなくECMAScriptの仕様であるため、
ブラウザが実行環境ではなくてもよいという考えと、実行の手軽さからNode.js上で動くものとして書いていった。

しかし一部を除いて、表示用コードはブラウザでの表示と実行を前提としている。
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ Promisesが実装されていない環境もあるため、[core-js](https://git

Promiseという機能についていう時は大文字の単数を使う。

例外としてES6 PromisesやPromises/A+の仕様について言及する際はsをつけてもよい。
例外としてES PromisesやPromises/A+の仕様について言及する際はsをつけてもよい。

小文字で始まるpromiseはpromiseオブジェクトのみにする。

Expand Down
8 changes: 4 additions & 4 deletions Ch0_Introduction/readme.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,20 @@

== 書籍の目的

この書籍はJavaScript標準仕様の<<es6-promises,ECMAScript 6 Promises>>という仕様を中心にし、
この書籍はJavaScript標準仕様の<<es-promises,ECMAScript Promises>>という仕様を中心にし、
JavaScriptにおけるPromiseについて学ぶことを目的とした書籍です。

この書籍を読むことで学べることとして次の3つを目標としています

- Promiseについて学び、パターンやテストを扱えるようになること
- Promiseの向き不向きについて学び、何でもPromiseで解決するべきではないと知ること
- ES6 Promisesを元に基本をよく学び、より発展した形を自分で形成できるようになること
- ES Promisesを元に基本をよく学び、より発展した形を自分で形成できるようになること

この書籍では、先程も述べたように<<es6-promises,ES6 Promises>>、
この書籍では、先程も述べたように<<es-promises,ES Promises>>、
つまりJavaScriptの標準仕様(ECMAScript)をベースとしたPromiseについて書かれています。

そのため、FirefoxやChromeなどモダンなブラウザでは、ライブラリを使うこと無く利用できる機能であり、
またES6 Promisesは元が<<promises-aplus,Promises/A+>>というコミュニティベースの仕様であるため、多くの実装ライブラリがあります。
またES Promisesは元が<<promises-aplus,Promises/A+>>というコミュニティベースの仕様であるため、多くの実装ライブラリがあります。

ブラウザネイティブの機能、またはライブラリを使うことで今すぐ利用できるPromiseについて基本的なAPIから学んでいきます。
その中でPromiseの得意/不得意を知り、Promiseを活用したJavaScriptを書けるようになることを目的としています。
Expand Down
6 changes: 3 additions & 3 deletions Ch1_WhatsPromises/promise-overview.adoc
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[[promises-overview]]
== Promise Overview

<<es6-promises,ES6 Promises>>の仕様で定義されているAPIはそこまで多くはありません。
<<es-promises,ES Promises>>の仕様で定義されているAPIはそこまで多くはありません。

大きく分けて以下の3種類になります。

Expand Down Expand Up @@ -101,7 +101,7 @@ Rejected::
Pending::
FulfilledまたはRejectedではない時。つまりpromiseオブジェクトが作成された初期状態等が該当する

これらの状態は<<es6-promises,ES6 Promises>>の仕様で定められている名前です。
これらの状態は<<es-promises,ES Promises>>の仕様で定められている名前です。
この状態をプログラムで直接触る方法は用意されていないため、書く際には余り気にしなくても問題ないですが、
Promiseについて理解するのに役に立ちます。

Expand All @@ -113,7 +113,7 @@ image::img/promise-states.png[promise-states]

[NOTE]
====
<<es6-promises,ES6 Promisesの仕様>> では `+++[[PromiseStatus]]+++` という内部定義によって状態が定められています。
<<es-promises,ES Promisesの仕様>> では `+++[[PromiseStatus]]+++` という内部定義によって状態が定められています。
`+++[[PromiseStatus]]+++` にアクセスするユーザーAPIは用意されていないため、基本的には知る方法はありません。
====

Expand Down
2 changes: 1 addition & 1 deletion Ch2_HowToWrite/promise-race.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ include::embed/embed-promise-race-other.js[]
一番最初のpromiseオブジェクトがFulfilledとなっても、他のpromiseがキャンセルされるわけでは無いということがわかります。

[NOTE]
<<es6-promises,ES6 Promises>>の仕様には、キャンセルという概念はありません。
<<es-promises,ES Promises>>の仕様には、キャンセルという概念はありません。
必ず、resolve or rejectによる状態の解決が起こることが前提となっています。
つまり、<<promise-states,状態>>が固定されてしまうかもしれない処理には不向きであるといえます。
ライブラリによってはキャンセルを行う仕組みが用意されている場合があります。
8 changes: 4 additions & 4 deletions Ch2_HowToWrite/promise-resolve.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ promiseオブジェクトの初期化時やテストコードを書く際にも

もう一つ `Promise.resolve` の大きな特徴として、<<Thenable,thenable>>なオブジェクトをpromiseオブジェクトに変換するという機能があります。

<<es6-promises,ES6 Promises>>には<<Thenable,Thenable>>という概念があり、簡単にいえばpromiseっぽいオブジェクトのことを言います。
<<es-promises,ES Promises>>には<<Thenable,Thenable>>という概念があり、簡単にいえばpromiseっぽいオブジェクトのことを言います。

`.length` を持っているが配列ではないものをArray likeというのと同じで、
thenableの場合は `.then` というメソッドを持ってるオブジェクトを言います。
Expand All @@ -61,7 +61,7 @@ $.ajax('https://httpbin.org/get');// => `.then` をもつオブジェクト
このthenableなオブジェクトを `Promise.resolve` ではpromiseオブジェクトにすることができます。

promiseオブジェクトにすることができれば、`then` や `catch` といった、
<<es6-promises,ES6 Promises>>がもつ機能をそのまま利用することができるようになります。
<<es-promises,ES Promises>>がもつ機能をそのまま利用することができるようになります。

[source,javascript]
.thenableをpromiseオブジェクトにする
Expand All @@ -79,12 +79,12 @@ promise.then(function(value){
https://api.jquery.com/jQuery.ajax/[jQuery.ajax()]の返り値も `.then` というメソッドを持った http://api.jquery.com/jQuery.ajax/#jqXHR[jqXHR Object]で、
このオブジェクトは http://api.jquery.com/category/deferred-object/[Deferred Object] のメソッドやプロパティ等を継承しています。
しかし、jQuery 2.x以下では、このDeferred Objectは<<promises-aplus,Promises/A+>>や<<es6-promises,ES6 Promises>>に準拠したものではありません。
しかし、jQuery 2.x以下では、このDeferred Objectは<<promises-aplus,Promises/A+>>や<<es-promises,ES Promises>>に準拠したものではありません。
そのため、Deferred Objectをpromiseオブジェクトへ変換できたように見えて、一部欠損する情報がでてしまうという問題があります。
この問題はjQueryの http://api.jquery.com/category/deferred-object/[Deferred Object] の `then` の挙動が違うために発生します。
そのため、`.then` というメソッドを持っていた場合でも、必ずES6 Promisesとして使えるとは限らないことは知っておくべきでしょう。
そのため、`.then` というメソッドを持っていた場合でも、必ずES Promisesとして使えるとは限らないことは知っておくべきでしょう。
* http://www.html5rocks.com/ja/tutorials/es6/promises/#toc-lib-compatibility[JavaScript Promises: There and back again - HTML5 Rocks]
* http://domenic.me/2012/10/14/youre-missing-the-point-of-promises/[You&#39;re Missing the Point of Promises]
Expand Down
2 changes: 1 addition & 1 deletion Ch3_Testing/basic-tests.adoc
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[[basic-tests]]
== 基本的なテスト

<<es6-promises,ES6 Promises>>のメソッド等についてひととおり学ぶことができたため、
<<es-promises,ES Promises>>のメソッド等についてひととおり学ぶことができたため、
実際にPromiseを使った処理を書いていくことはできると思います。

そうした時に、次にどうすればいいのか悩むのがPromiseのテストの書き方です。
Expand Down
4 changes: 2 additions & 2 deletions Ch4_AdvancedPromises/promise-chain.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ JavaScriptでは動的にメソッドを定義することもできるため、
自動的にPromise版を生成できないかということを考えると思います。
(もちろん静的に定義する方が扱いやすいですが)

そのような仕組みは<<es6-promises,ES6 Promises>>にはありませんが、
そのような仕組みは<<es-promises,ES Promises>>にはありませんが、
著名なサードパーティのPromise実装である https://github.com/petkaantonov/bluebird/[bluebird] などには
https://github.com/petkaantonov/bluebird/blob/master/API.md#promisification[Promisification] という機能が用意されています。

Expand Down Expand Up @@ -248,7 +248,7 @@ Node.jsのCoreモジュールの非同期処理には `function(error,result){}`
* Promisification
* 統一的なインターフェースの再利用

<<es6-promises,ES6 Promises>>はCoreとなる機能しか用意されていません。
<<es-promises,ES Promises>>はCoreとなる機能しか用意されていません。
そのため、自分でPromiseを使った既存の機能のラッパー的な実装をすることがあるかもしれません。

しかし、何度もコールバックを呼ぶEventのような処理がPromiseには不向きなように、
Expand Down
8 changes: 4 additions & 4 deletions Ch4_AdvancedPromises/promise-done.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
それらのライブラリでは `Promise.prototype.done` というような実装が存在し、
使い方は `then` と同じですが、promiseオブジェクトを返さないようになっています。

`Promise.prototype.done` は、<<es6-promises,ES6 Promises>>や<<promises-aplus,Promises/A+>>の仕様には
`Promise.prototype.done` は、<<es-promises,ES Promises>>や<<promises-aplus,Promises/A+>>の仕様には
存在していない記述ですが、多くのライブラリが実装しています。

このセクションでは、`Promise.prototype.done` とは何か?
Expand Down Expand Up @@ -193,7 +193,7 @@ try{

現在では多くの実行環境で、__unhandled rejection__を検知してコンソールに警告を表示するため、`done` が必要な場合は少なくなっています。
また今回の<<promise-prototype-done.js,`Promise.prototype.done`>>のように、`done` は既存のPromiseの上に実装することができるため、
<<es6-promises,ES6 Promises>>の仕様そのものには入らなかったといえるかもしれません。
<<es-promises,ES Promises>>の仕様そのものには入らなかったといえるかもしれません。

[NOTE]
今回の `Promise.prototype.done` の実装は https://www.promisejs.org/[promisejs.org] を参考にしています。
Expand All @@ -214,7 +214,7 @@ try{
また、`done` は値を返さないことでそれ以上Promise chainを繋げることができなくなるため、
そのような統一感を持たせるという用途で `done` を使うこともできます。

<<es6-promises,ES6 Promises>> では根本に用意されてる機能はあまり多くありません。
<<es-promises,ES Promises>> では根本に用意されてる機能はあまり多くありません。
そのため、自ら拡張したり、拡張したライブラリ等を利用するケースが多いと思います。

そのときでも何でもやり過ぎると、せっかく非同期処理をPromiseでまとめても複雑化してしまう場合があるため、
Expand All @@ -232,4 +232,4 @@ Promiseの拡張を書く手法について書かれています。
また、Delegateを利用した方法については、 http://speakingjs.com/es5/ch28.html[Chapter 28. Subclassing Built-ins] にて
詳しく解説されています。
====
====
Loading

0 comments on commit 089f94f

Please sign in to comment.