【问题标题】:Does Body.json parse run off the event loop?Body.json 解析是否会脱离事件循环?
【发布时间】:2023-03-29 07:05:02
【问题描述】:

Body.json() 周围有很多关于堆栈溢出的问题,但我找不到能回答我具体问题的问题。

如果我运行JSON.parse(),这将阻塞事件循环,直到它完成解析。

fetch() 将完全脱离事件循环为我获取资源,返回一个 Promise,它仅在请求完成时安排回调到事件循环(我相信)。

Body.json() 也返回一个承诺。这是否意味着它会在事件循环之外调用JSON.parse(),并且仅在对象完成解析时才安排回调?

【问题讨论】:

    标签: javascript json fetch-api


    【解决方案1】:

    JSON.parse 不一定是异步调用的。
    异步 .json 返回一个 Promise,因为 Request promise 返回的结果不包含响应正文,而 .json 需要下载响应正文才能解析它

    【讨论】:

    • 需要读取数据流而不是“需要下载响应正文”。在您使用请求正文时,数据已经下载完毕。
    • 所以JSON.parse在主事件循环线程上被调用,本质上是阻塞UI的绘制?
    • @Cheetah JSON.parse 根本没有被调用。可能会调用与此方法使用的相同的底层函数,但浏览器不会使用您有权访问的方法,而不是来自主循环线程号。现在,它会阻止用户界面吗?很难说,它的实现和设备依赖..
    • @Kaiido - 这是我所期待的答案(特定于实现)......我想很可能 json 解析将在后台线程上完成。
    猜你喜欢
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多