@@ -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を返す関数です。
5152include::../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
6975function main() {
76+ // `fetchBookTitle`関数は、取得したJSONの`title`プロパティでresolveされる
7077 fetchBookTitle().then((title) => {
7178 console.log(title); // => "JavaScript Promiseの本"
7279 });
@@ -75,8 +82,9 @@ function main() {
7582main();
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