2016-07-19 9 views
-2

Body.jsonreturns a promise.Ist WebAPI Body.json asynchron?

Ist diese Methode asynchron, um Blockierungen beim Lesen großer eingehender Datenströme zu vermeiden?

Führt es so etwas wie setTimeout(sampleStream, 0) wiederholt, bis das Ende des Streams gefunden wird?

+0

Btw, 'Promise' führen Mikroaufgaben aus, dh jeder Aufruf ihrer Rückrufe wird an die aktuelle Iteration der Ereignisschleife angehängt. Dies kann zu einem Blockierungsverhalten führen (z. B. wenn eine Rekursion involviert ist). Der 'setTimeout'-Rückruf wird andererseits innerhalb der nächsten Iteration der Ereignisschleife ausgeführt. – ftor

+0

Ist Mikro-Task ein gut definiertes Konzept? – Ben

+1

Yep [Unterschied zwischen Mikrotask und Makrotask innerhalb eines Ereignisschleifenkontexts] (http://stackoverflow.com/q/25915634/6445533) – ftor

Antwort

1

Ist .json() asynchron?

Ja. Deshalb gibt es ein Versprechen.

Ist diese Methode asynchron, um Blockierungen beim Lesen großer eingehender Datenströme zu vermeiden?

Ja. Sie erhalten die Response direkt nach dem Eintreffen der Header, und das Empfangen des Körpers kann einige Zeit dauern.

Tut es so etwas wie setTimeout(sampleStream, 0) wiederholt, bis das Ende des Streams gefunden wird?

Nicht genau. Es verwendet nicht setTimeout, liest es aus dem Stream durch wiederholbar Versprechungen für den nächsten Brocken bekommen - einfach über reading all bytes from a ReadableStream selbst überprüfen.
Und vor allem geschieht dies alles auf einer Hintergrundaufgabe ohne Bedenken für JavaScript. Wie die Notiz in diesem Abschnitt sagt: Weil der Leser exklusiven Zugriff gewährt, kann der tatsächliche Mechanismus des Lesens nicht beobachtet werden. Implementierungen könnten einen direkteren Mechanismus verwenden, wenn dies praktisch ist.