1

その MDN 記述に基づいて、 のようなRequest機能が実装されています。ただし、これらの関数が実際に何をするのかはわかりません。彼らは何もしていないようです。Bodytext()

私はこのようなコードを持っています

var r = new Request('http://google.com');
r.text().then(function(text) {
    alert(JSON.stringify(text));
}, function(error) {
    alert("error");
});

何が起こるかというと、Promise は空の文字列ですぐに解決され、リクエストは発生しません。開発ツール (またはwireshark) でネットワーク アクティビティを見ると、実際のリクエストは発生しません。しかし、エラーもありません。

何が起こっている?BodyAPIの目的は何ですか?

MDN の説明では「応答ストリーム」について説明していますが、応答はありません (実際の取得がまだ行われていないため)。(編集:私は自分の質問に答えたので、MDNページも編集したので、今では意味があります。)

仕様には次のように記載されています。

Request オブジェクトのボディ消費アルゴリズムは、指定されたタイプで、次の手順を実行します。

  1. この Request オブジェクトが妨害された場合、TypeError で拒否された新しい promise を返します。

  2. 妨害フラグを設定します。

  3. p を新しい約束とする。

  4. 次のサブステップを並行して実行します。

    1. bytes を空のバイト シーケンスとします。

    2. リクエストのボディが null でない場合、ストリームの終わりを返すまで、バイトをリクエストのボディから読み取った結果に設定します。

    3. バイト、タイプ、および MIME タイプでパッケージ データ アルゴリズムを実行した結果で p を解決します。それが例外をスローした場合、その例外で p を拒否します。

  5. pを返します。

私はそれからあまり頭が良くありません。

(注: 私が求めているのは非常に詳細な質問であることはわかっています。/ / が一般的に何をするかについて尋ねているfetchわけResponseではありませんRequest。)

4

2 に答える 2

1

これは私の解釈です:

Request オブジェクトのボディ消費アルゴリズムは、指定されたタイプで、次の手順を実行します。

  1. この Request オブジェクトが妨害された場合、TypeError で拒否された新しい promise を返します。

  2. 妨害フラグを設定します。

  3. p を新しい約束とする。

  4. 次のサブステップを並行して実行します。

    1. bytes を空のバイト シーケンスとします。

    2. リクエストのボディが null でない場合、ストリームの終わりを返すまで、バイトをリクエストのボディから読み取った結果に設定します。

    3. バイト、タイプ、および MIME タイプでパッケージ データ アルゴリズムを実行した結果で p を解決します。それが例外をスローした場合、その例外で p を拒否します。

  5. pを返します。

1、2、3、4.1、4.2 に従ってください。4.3 はパッケージ データ アルゴリズム ( https://fetch.spec.whatwg.org/#concept-body-package-data ) につながりtextます。で utf-8 デコードを実行した結果bytes

bytesは空のバイト シーケンスであるため、promise は空の文字列に解決されます。

于 2016-02-11T20:25:45.973 に答える
1

実際にリクエストに本文を追加すると、リクエストの本文.text()が返されます。

簡単な例:

// method cannot be GET for custom body
var r = new Request('http://google.com', {method: 'POST', body: "something"}); 
r.text().then(function(text) {
    alert(JSON.stringify(text)); // alerts "something"
}, function(error) {
    alert("error");
});

基本的にはそれだけです。質問の例には本文がないため、空の文字列で解決されます。

于 2016-02-11T20:46:26.123 に答える