質問するログイン新規登録

回答編集履歴

4

修正

2021/09/02 09:35

投稿

退会済みユーザー
answer CHANGED
@@ -42,4 +42,10 @@
42
42
 
43
43
  ---
44
44
 
45
- ‘json()`が、JSONオブジェクトを直接返すメソッドではなく、Promiseを返すメソッドとなっていることのメリットは、JSON文字列のパース処理部分を(比較的簡単に)非同期処理として記述できる、という点だと思います。
45
+ ~~‘json()`が、JSONオブジェクトを直接返すメソッドではなく、Promiseを返すメソッドとなっていることのメリットは、JSON文字列のパース処理部分を(比較的簡単に)非同期処理として記述できる、という点だと思います。~~
46
+ これは誤りでした。
47
+
48
+ hoshi-takanoriさんが質問へのコメントに記載のstacocerflow内のコメントによると
49
+ 「res.json() は res.text().then(JSON.parse) のショートカットとのこと。
50
+
51
+ hoshi-takanoriさんコメントのように、、「fetch 自体はレスポンスヘッダーが返ってきた段階 (XHR の readyState = 2) で resolve するが、response.json はボディ全体が返る (XHR の readyState = 4) までは resolve しない」となっていることのようですね。

3

修正

2021/09/02 09:35

投稿

退会済みユーザー
answer CHANGED
@@ -38,4 +38,8 @@
38
38
  したがって、冒頭の質問に対する直接的な回答としては、
39
39
  「Fetch APIは、fetch() で取得したPromiseを解決して一旦Responseオブジェクトを取得し、その取得したResponseオブジェクトに対して、様々な種類のPromiseを返すようなメソッドを持つ**設計**になっているから
40
40
  (response.json()は、それらのうちの1つである)」
41
- ということになります。
41
+ ということになります。
42
+
43
+ ---
44
+
45
+ ‘json()`が、JSONオブジェクトを直接返すメソッドではなく、Promiseを返すメソッドとなっていることのメリットは、JSON文字列のパース処理部分を(比較的簡単に)非同期処理として記述できる、という点だと思います。

2

2021/09/02 09:26

投稿

退会済みユーザー
answer CHANGED
@@ -30,7 +30,7 @@
30
30
   
31
31
  json()メソッドは、上記のうちの1つです。
32
32
 
33
- 「レスポンスの本文のテキストを JSON として解釈した結果で解決するPromiseを受け取り、それを解決した結果を受け取る」場合、一例として下記のように書けば実現できます。
33
+ 「レスポンスの本文のテキストを JSON として解釈した結果で解決するPromiseを解決した結果を受け取る」場合、一例として下記のように書けば実現できます。
34
34
  ```
35
35
  const json = await response.json();
36
36
  ```

1

2021/09/02 09:00

投稿

退会済みユーザー
answer CHANGED
@@ -30,7 +30,7 @@
30
30
   
31
31
  json()メソッドは、上記のうちの1つです。
32
32
 
33
- 「レスポンスの本文のテキストを JSON として解釈した結果で解決するPromiseを受け取る」場合、一例として下記のように書けば実現できます。
33
+ 「レスポンスの本文のテキストを JSON として解釈した結果で解決するPromiseを受け取り、それを解決した結果を受け取る」場合、一例として下記のように書けば実現できます。
34
34
  ```
35
35
  const json = await response.json();
36
36
  ```