2016-07-19 3 views
-2

Body.jsonreturns a promise.Является ли WebAPI Body.json асинхронным?

Является ли этот метод асинхронным, чтобы избежать блокировки при чтении больших входящих потоков данных?

Разве что-то вроде setTimeout(sampleStream, 0) несколько раз, пока не будет найден конец потока?

+0

Btw, 'Promise' выполняет микрозадания, что означает, что каждое обращение их обратных вызовов добавляется к текущей итерации цикла событий. Это может привести к поведению блокировки (например, при использовании рекурсии). С другой стороны, обратный вызов setTimeout' выполняется в следующей итерации цикла событий. – ftor

+0

Является ли микрозадание четко определенной концепцией? – Ben

+1

Yep [Разница между микрозадачей и макрозадачей в контексте цикла событий] (http://stackoverflow.com/q/25915634/6445533) – ftor

ответ

1

.json() асинхронный?

Да. Вот почему он возвращает обещание.

Этот метод асинхронен, чтобы избежать блокировки при чтении больших входящих потоков данных?

Да. Вы получаете Response сразу после прибытия заголовков, и получение тела может занять некоторое время.

Разве что-то вроде setTimeout(sampleStream, 0) несколько раз, пока не будет найден конец потока?

Не совсем. Он не использует setTimeout, он читает из потока, повторяя получение обещаний для следующего фрагмента - просто проверьте около reading all bytes from a ReadableStream.
И самое главное, все это происходит в фоновом задании без каких-либо проблем для JavaScript. Как отмечается в этом разделе: Поскольку читатель предоставляет эксклюзивный доступ, фактический механизм чтения не может быть соблюден. Реализации могут использовать более прямой механизм, если это удобно.