获取 api,为什么我必须在响应 json() 上使用 then,试图做出承诺

Ced*_*Ced 5 javascript json fetch ecmascript-6

我试图理解承诺,所以我在 twitch 上尝试了一个简单的 get 请求。我不明白的是为什么会json()返回一个承诺。为什么 ?响应中已经包含数据,那么为什么它是一个承诺?

fetch('https://api.twitch.tv/kraken/games/top?limit=10&offset=0')
    .then( resp => {
        resp.json()
            .then(function(data) {  
                        console.log(data);  
        });
  });
Run Code Online (Sandbox Code Playgroud)

换句话说:第一个then,我理解,它等待响应。然而,当进入 then 函数时,这意味着已经收到响应,因此数据应该可以立即访问,而无需另一个承诺。它只是让我感到困惑。

Kar*_*rin 7

文档

fetch() 请求的响应是一个 Stream 对象,这意味着当我们调用 json() 方法时,会返回一个 Promise,因为读取流将异步发生。