.json() は Promise を返すのに、.then() を通過するときは返さないのはなぜですか?
質問:
Fetch API の使用中に、.json() メソッドが返されることが観察されます。 .then() ハンドラーのオブジェクト リテラル内で使用される場合の Promise オブジェクト。ただし、オブジェクト リテラルなしで使用すると、値が直接返されます。
答え:
Promise について:
.json() は、ヘッダーが利用可能なときに HTTP 応答が受信されるため、Promise を返しますが、本文 (この例ではJSON の場合)はまだロードされていません。 .json() は本文の 2 番目の Promise を取得します。これは個別にロードする必要があります。
.then() の動作について:
Promise が a .then() コールバック。外側のチェーンによって採用されます。これは、外側の .then() が内側の Promise の満たされた値を受け取ることを意味します。指定された例では、外側の .then() は data プロパティと status プロパティを持つオブジェクトを受け取り、実質的に data プロパティを .then() 内で直接利用できるようにします。
代替ソリューション:
1 つの .then() ハンドラー内でステータスと JSON データの両方に直接アクセスするには、次のコマンドを使用できます。テクニック:
fetch(url) .then(response => response.json()) .then(data => { console.log(response.status, data.title); });
const response = await fetch(url); const data = await response.json(); console.log(response.status, data.title);
必ずしも応答ステータスを確認できるとは限らないため、本文を読む前に必ず応答ステータスを確認してください。 JSON データが含まれています。
以上が`fetch().then().json()` が Promise を返す場合と返さない場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。