ホームページ > ウェブフロントエンド > jsチュートリアル > `fetch().then().json()` が Promise を返す場合と返さない場合があるのはなぜですか?

`fetch().then().json()` が Promise を返す場合と返さない場合があるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-11 14:19:11
オリジナル
451 人が閲覧しました

Why Does `fetch().then().json()` Sometimes Return a Promise and Sometimes Not?

.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 データの両方に直接アクセスするには、次のコマンドを使用できます。テクニック:

  • ネストされた .then() ブロックを使用する:
fetch(url)
  .then(response => response.json())
  .then(data => {
    console.log(response.status, data.title);
  });
ログイン後にコピー
  • async/await を使用する (非同期関数が必要):
const response = await fetch(url);
const data = await response.json();
console.log(response.status, data.title);
ログイン後にコピー

必ずしも応答ステータスを確認できるとは限らないため、本文を読む前に必ず応答ステータスを確認してください。 JSON データが含まれています。

以上が`fetch().then().json()` が Promise を返す場合と返さない場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート