Body.json
returns a promise。WebAPI Body.jsonは非同期ですか?
大量の受信データストリームの読み取り時にブロックされないように、このメソッドは非同期ですか?
ストリームの終わりが見つかるまで、それはsetTimeout(sampleStream, 0)
のような何かを繰り返しますか?
Body.json
returns a promise。WebAPI Body.jsonは非同期ですか?
大量の受信データストリームの読み取り時にブロックされないように、このメソッドは非同期ですか?
ストリームの終わりが見つかるまで、それはsetTimeout(sampleStream, 0)
のような何かを繰り返しますか?
.json()
は非同期ですか?
はい。それが約束を返す理由です。
は、大規模なインバウンド・データ・ストリームを読むことでブロックを回避するには、このメソッドは非同期ですか?
はい。ヘッダーが到着した直後にResponse
を受信し、受信に時間がかかることがあります。
ストリームの最後が見つかるまで、
setTimeout(sampleStream, 0)
のような処理を繰り返しますか?
正確ではありません。それはsetTimeout
を使用せず、ストリームから次のチャンクに対する約束を繰り返し得ることによって読み込みます。ちょうどreading all bytes from a ReadableStreamを確認してください。
そして、最も重要なことは、これはすべてJavaScriptの心配なしにバックグラウンドタスクで起こることです。そのセクションの注釈は次のように伝えます:読者は排他的アクセスを許可するので、読む方法の実際の仕組みは観察できません。便利な場合、実装はより直接的なメカニズムを使用できます。
Btw、Promiseは、コールバックのすべての呼び出しがイベントループの現在の反復に追加されることを意味するマイクロタスクを実行します。これにより、ブロック動作(例えば、再帰が関与する場合)につながる可能性があります。一方、 'setTimeout'のコールバックは、イベントループの次の反復で実行されます。 – ftor
マイクロタスクは明確なコンセプトですか? – Ben
[イベントループコンテキスト内でのマイクロタスクとマクロタスクの違い](http://stackoverflow.com/q/25915634/6445533) – ftor