【问题标题】:Is WebAPI Body.json asynchronous?WebAPI Body.json 是异步的吗?
【发布时间】:2016-11-22 05:50:38
【问题描述】:

Body.jsonreturns a promise

此方法是否异步以避免阻塞读取大量入站数据流?

它是否会重复执行setTimeout(sampleStream, 0) 之类的操作,直到找到流的末尾?

【问题讨论】:

  • 顺便说一句,Promises 执行微任务,这意味着,每次调用它们的回调都会附加到事件循环的当前迭代中。这可能导致阻塞行为(例如,如果涉及递归)。另一方面,setTimeout 的回调在事件循环的下一次迭代中执行。
  • 微任务是一个定义明确的概念吗?

标签: javascript fetch-api


【解决方案1】:

.json() 是异步的吗?

是的。这就是它返回承诺的原因。

此方法是否异步以避免阻塞读取大量入站数据流?

是的。您在标头到达后立即收到Response,接收正文可能需要一些时间。

它是否会重复执行setTimeout(sampleStream, 0) 之类的操作,直到找到流的末尾?

不完全是。它不使用setTimeout,它通过重复获取下一个块的承诺来从流中读取 - 只需自己检查reading all bytes from a ReadableStream
最重要的是,这一切都发生在后台任务上,无需担心 JavaScript。正如该部分的注释所说:由于阅读器授予独占访问权限,因此无法观察到如何阅读的实际机制。如果方便,实现可以使用更直接的机制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    相关资源
    最近更新 更多