Skip to content

Commit

Permalink
chore(all): s/Promises/Promise/
Browse files Browse the repository at this point in the history
ref. #41
  • Loading branch information
azu committed May 24, 2014
1 parent 1d802f6 commit 61adb10
Show file tree
Hide file tree
Showing 16 changed files with 30 additions and 30 deletions.
12 changes: 6 additions & 6 deletions Ch1_WhatsPromises/promise-overview.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ promise.catch(onRejected)
`Promise.all()` や `Promise.resolve()` などが該当し、Promiseを扱う上での補助メソッドが中心となっています。


=== Promises workflow
=== Promise workflow

以下のようなサンプルコードを見てみましょう。

Expand Down Expand Up @@ -76,9 +76,9 @@ asyncFunction().then(function (value) {
});
----

=== Promisesの状態 [[promise-states]]
=== Promiseの状態 [[promise-states]]

Promisesの処理の流れが簡単にわかった所で、少しPromisesの状態について整理したいと思います
Promiseの処理の流れが簡単にわかった所で、少しPromiseの状態について整理したいと思います

`new Promise` でインスタンス化したpromiseオブジェクトには以下の3つの状態が存在します。

Expand Down Expand Up @@ -112,20 +112,20 @@ http://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects[ECMAScr
promiseオブジェクトの状態は、一度__Pending__から__Fulfilled__や__Rejected__になると、
そのpromiseオブジェクトの状態はそれ以降変化することはなくなります。

つまり、PromisesはEvent等とは違い、`.then` で登録した関数が呼ばれるのは1回限りという事が明確になっています。
つまり、PromiseはEvent等とは違い、`.then` で登録した関数が呼ばれるのは1回限りという事が明確になっています。

また、__Fulfilled__と__Rejected__のどちらかの状態であることを**Settled**(不変の)と表現することがあります。

Settled::
resolve(解決) または reject(棄却) された時。

__Pedding__と__Settled__が対となる関係であると考えると、Promisesの状態の種類/遷移がシンプルであることがわかると思います。
__Pedding__と__Settled__が対となる関係であると考えると、Promiseの状態の種類/遷移がシンプルであることがわかると思います。

このpromiseオブジェクトの状態が変化した時に、一度だけ呼ばれる関数を登録するのが `.then` といったメソッドとなるわけです。

[NOTE]
====
https://speakerdeck.com/kerrick/javascript-promises-thinking-sync-in-an-async-world[JavaScript Promises - Thinking Sync in an Async World // Speaker Deck]
というスライドではPromisesの状態遷移について分かりやすく書かれています
というスライドではPromiseの状態遷移について分かりやすく書かれています
====

4 changes: 2 additions & 2 deletions Ch1_WhatsPromises/readme.adoc
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
[[chapter1-what-is-promise]]
= Chapter.1 - Promisesとは何か
= Chapter.1 - Promiseとは何か
:imagesdir: Ch1_WhatsPromises/

Promisesとは何かの簡単な概要の紹介です
Promiseとは何かの簡単な概要の紹介です

include::what-is-promise.adoc[]

Expand Down
2 changes: 1 addition & 1 deletion Ch1_WhatsPromises/what-is-promise.adoc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[[what-is-promise]]
== What Is Promises
== What Is Promise

- [ ] プロミスとはどういう概念なのかー
- [ ] Promisesはどうやってできた? <= これはコラムとかで良さそう
Expand Down
8 changes: 4 additions & 4 deletions Ch1_WhatsPromises/writing-promises.adoc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[[how-to-write-promise]]
== Promisesの書き方
== Promiseの書き方

Promiseの基本的な書き方について解説します。

Expand Down Expand Up @@ -30,7 +30,7 @@ resolveの引数に入れる値には特に決まりはありませんが、コ
(この値は`then`メソッドで受け取ることが出来ます)

Node.jsをやっている人は、コールバックを書く時に `callback(error, response)` と第一引数にエラーオブジェクトを
入れることがよくあると思いますが、Promisesでは役割がresolve/rejectで分担されているので、
入れることがよくあると思いますが、Promiseでは役割がresolve/rejectで分担されているので、
resolveにはresponseの値のみをいれるだけで問題ありません。


Expand Down Expand Up @@ -128,8 +128,8 @@ getURL(URL).then(onFulfilled, onRejected);// <1>
* `new Promise` を使いpromiseオブジェクトの作成
* <<promise.then,`.then`>> や <<promise.catch,`.catch`>> を使ったpromiseオブジェクトの処理

Promisesの基本的な書き方はこれがベースとなり
Promiseの基本的な書き方はこれがベースとなり
他の多くの処理はこれを発展させたり、用意された静的メソッドを利用したものになります。

ここでは、同様の事はコールバック関数を渡す形でも出来るのに対してPromisesで書くメリットについては触れていませんでしたが
ここでは、同様の事はコールバック関数を渡す形でも出来るのに対してPromiseで書くメリットについては触れていませんでしたが
次の章では、Promiseのメリットであるエラーハンドリングの仕組みをコールバックベースの実装と比較しながら見て行きたいと思います。
2 changes: 1 addition & 1 deletion Ch2_HowToWrite/column-promise-resolve.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ outer promise
42
----

つまり、Promisesは常に非同期で処理が行われているという事になります
つまり、Promiseは常に非同期で処理が行われているという事になります
2 changes: 1 addition & 1 deletion Ch2_HowToWrite/promise-and-array.adoc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[[ch2-promise-and-array]]
== promiseと配列
== Promiseと配列

先ほどの章では、promiseオブジェクトがresolve又はrejectされた時の処理は <<promise.then,`.then`>> と <<promise.catch,`.catch`>> を
使うことで行える事を学びました。
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 @@ -39,7 +39,7 @@ include::embed/embed-promise-race-other.js[]
一番最初のpromiseオブジェクトがFulfilledとなっても、他のpromiseがキャンセルされるわけでは無いという事がわかります。

[NOTE]
Promisesの仕様には、キャンセルという概念はありません。
<<es6-promises,ES6 Promises>>の仕様には、キャンセルという概念はありません。
必ず、resolve or rejectによる状態の解決が起こることが前提となっています。
つまり、<<promise-states,状態>>が固定されてしまうかもしれない処理には不向きであると言えます。
ライブラリによってはキャンセルを行う仕組みが用意されている場合があります。
2 changes: 1 addition & 1 deletion Ch2_HowToWrite/readme.adoc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[[chapter2-how-to-write-promise]]
= Chapter.2 - Promisesの書き方
= Chapter.2 - Promiseの書き方
:imagesdir: Ch2_HowToWrite/

この章では、Promiseのメソッドの使い方、エラーハンドリングについて学びます。
Expand Down
6 changes: 3 additions & 3 deletions 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,ES6 Promises>>のメソッド等についてひと通り学ぶことができたため
実際にPromiseを使った処理を書いていくことは出来ると思います。

そうした時に、次にどうすればいいのか悩むのがPromiseのテストの書き方です。
Expand All @@ -24,9 +24,9 @@ Mochaを選んだ理由としては、以下の点で選択しました。

* 著名なテストフレームワークであること
* Node.jsとブラウザ どちらのテストもサポートしている
* "Promisesのテスト"をサポートしている
* "Promiseのテスト"をサポートしている

最後の_"Promisesのテスト"をサポートしている_とはどういうことなのかについては後ほど解説します。
最後の_"Promiseのテスト"をサポートしている_とはどういうことなのかについては後ほど解説します。

また、アサーションライブラリには、 https://github.com/twada/power-assert[power-assert]を利用しますが、
アサーション自体はNode.jsの`assert`モジュールと全く同じであるため、今回はあまり気にしなくても問題ありません。
Expand Down
2 changes: 1 addition & 1 deletion Ch3_Testing/controlable-tests.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ include::embed/embed-shouldFulfilled-test.js[]

=== まとめ

Promisesで意図したテストを書くためにはどうするか、またそれを補助するヘルパー関数について学びました。
Promiseで意図したテストを書くためにはどうするか、またそれを補助するヘルパー関数について学びました。

今回書いた`shouldFulfilled`と`shouldRejected`をライブラリ化したものは https://github.com/azu/promise-test-helper[azu/promise-test-helper] にあります。

Expand Down
2 changes: 1 addition & 1 deletion Ch3_Testing/mocha-promise.adoc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[[mocha-promise]]
== MochaのPromisesサポート
== MochaのPromiseサポート

MochaがサポートしてるPromiseのテストとは何かについて学んでいきましょう。

Expand Down
4 changes: 2 additions & 2 deletions Ch3_Testing/readme.adoc
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
[[chapter3-promise-testing]]
= Chapter.3 - Promisesのテスト
= Chapter.3 - Promiseのテスト
:imagesdir: Ch3_Testing/

この章ではPromisesのテストの書き方について学んで行きます
この章ではPromiseのテストの書き方について学んで行きます

// Promiseの基本的なテスト
include::basic-tests.adoc[]
Expand Down
2 changes: 1 addition & 1 deletion Ch4_AdvancedPromises/deferred-promise.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
Deferredという単語はPromiseと同じコンテキストで聞いた事があるかもしれません。
有名な所だと http://api.jquery.com/category/deferred-object/[jQuery.Deferred] や http://cho45.stfuawsc.com/jsdeferred/[JSDeferred] 等があげられるでしょう。

DeferredはPromisesと違い、共通の仕様があるわけではなく、各ライブラリがそのような目的の実装をそう呼んでいます。
DeferredはPromiseと違い、共通の仕様があるわけではなく、各ライブラリがそのような目的の実装をそう呼んでいます。

今回は http://api.jquery.com/category/deferred-object/[jQuery.Deferred] を中心にして話を進めます。

Expand Down
2 changes: 1 addition & 1 deletion Ch4_AdvancedPromises/functional-promise.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Promiseで複数の処理を扱うときには次のような流れに乗ると
. promiseの配列に対するresolveの結果も配列となる

このような流れを作る事で、全てのデータを配列として扱うことができるようにすることで、
Promisesのコントロールフローがキレイに書ける可能性が高くなります
Promiseのコントロールフローがキレイに書ける可能性が高くなります

元データ(配列) -> promiseオブジェクトの配列 -> resolveで渡された値の配列

Expand Down
6 changes: 3 additions & 3 deletions Ch4_AdvancedPromises/race-delay-timeout.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,6 @@ cancelableXHR.abortPromise(xhrPromise);// <2>
* XHRのpromiseのリクエストのキャンセル
* モジュール化によるpromiseオブジェクトと操作の分離

Promisesは処理のフローを制御する力に優れているため、それを
最大限活かすためには一つの関数でやり過ぎないで処理を小さく分けること等、今までの
JavaScriptで言われているような事をより意識していいのかもしれません
Promiseは処理のフローを制御する力に優れているため、
それを最大限活かすためには一つの関数でやり過ぎないで処理を小さく分けること等、
今までのJavaScriptで言われているような事をより意識していいのかもしれません
2 changes: 1 addition & 1 deletion Ch4_AdvancedPromises/resolve-thenable.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -173,4 +173,4 @@ Thenableを使った<<notification-thenable.js>>とPromiseに依存した<<notif
* コールバックスタイル(`notifyMessage()`)でも利用できる

<<Thenable,thenable>>オブジェクトを利用することで、
既存のコールバックスタイルとPromisesの親和性を高めることができる事が分かります
既存のコールバックスタイルとPromiseの親和性を高めることができる事が分かります

0 comments on commit 61adb10

Please sign in to comment.