Skip to content

Commit 0adf34c

Browse files
authored
feat(Ch5): Fetch APIの解説を補足 (#334)
* feat(Ch5): Fetch APIの解説を補足 * fix * fix typo * refactor: =>
1 parent 1b02f03 commit 0adf34c

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

Ch4_AdvancedPromises/lib/cancelableXHR.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ function createXHRPromise(URL) {
1919
req.onerror = () => {
2020
reject(new Error(req.statusText));
2121
};
22-
req.onabort = function() {
22+
req.onabort = () => {
2323
reject(new Error("abort this req"));
2424
};
2525
req.send();

Ch5_AsyncFunction/async-function.adoc

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,13 @@ doAsync().then((value) => {
3737
またAsync Function内では``await``式というPromiseの非同期処理が完了するまで待つ構文が利用できます。
3838
``await``式を使うことで非同期処理を同期処理のように扱えるため、Promiseチェーンで実現していた処理の流れを読みやすくかけます。
3939

40-
まずは、Async Functionと``await``式を使った場合はどのように書けるかを簡単に見ていきます
40+
Async Functionと``await``式の大まかな動きをイメージするために、まずはPromise APIで書いたものと比較してみます
4141

42-
次の例では https://developer.mozilla.org/ja/docs/Web/API/Fetch_API[Fetch API] で``/json/book.json``を取得して、``title``を取り出す``getBookTitle``関数の実行結果をコンソールに出力しています。
43-
Fetch APIはURLのリソースを取得し、Promiseを返す関数です。
42+
ここでは、XHRの現代的なバージョンである https://developer.mozilla.org/ja/docs/Web/API/Fetch_API[Fetch API] を使います。Fetch APIは指定したURLのリソースを読み書きでき、デフォルトでES Promisesに対応しています。
4443

45-
このとき、取得できる``/json/book.json``は次のような内容になっています。
44+
次のサンプルコードでは、``https://azu.github.io/promises-book/json/book.json``というURLからJSONデータを取得して、``title``プロパティを取り出す``getBookTitle``関数を実装していきます。
45+
46+
取得する``https://azu.github.io/promises-book/json/book.json``は次のような内容になっています。
4647

4748
[[book.json]]
4849
./json/book.json
@@ -51,7 +52,12 @@ Fetch APIはURLのリソースを取得し、Promiseを返す関数です。
5152
include::../json/book.json[]
5253
----
5354

54-
まずは、Promise APIを使って``fetchBookTitle``関数で取得したタイトルをコンソールに出力してみます。
55+
まずは、Fetch APIを使って``fetchBookTitle``関数で取得したタイトルをコンソールに出力してみます。
56+
57+
``fetch``メソッドはPromiseを返します。このPromiseインスタンスはリクエストのレスポンスを表す``Response``オブジェクトでresolveされます。
58+
``Response#json``メソッドもPromiseを返します。このPromiseインスタンスは取得したリソースをJSONとしてパースしたオブジェクトでresolveされます。
59+
60+
``fetchBookTitle``関数は、次のように``fetch``メソッドで取得したJSONの``title``プロパティでreoslveされるPromiseインスタンスを返します。
5561

5662
[role="executable"]
5763
[doctest-state="disabled"]
@@ -67,6 +73,7 @@ function fetchBookTitle() {
6773
}
6874
6975
function main() {
76+
// `fetchBookTitle`関数は、取得したJSONの`title`プロパティでresolveされる
7077
fetchBookTitle().then((title) => {
7178
console.log(title); // => "JavaScript Promiseの本"
7279
});
@@ -75,8 +82,9 @@ function main() {
7582
main();
7683
----
7784

78-
次は同様の処理をAsync Functionと``await``式で書いています。
79-
Promise APIを使っていた場合に比べて、コールバック関数がなくなっていることが分かります。
85+
次は、同様の処理をAsync Functionと``await``式で実装してみます。
86+
ここではまだ挙動を理解しなくても問題ありませんが、
87+
Promise APIを使っていた場合に比べて、``then``メソッドやコールバック関数がなくなっていることが分かります。
8088

8189
[role="executable"]
8290
[doctest-state="disabled"]

0 commit comments

Comments
 (0)