获取api,为啥我必须在响应json()上使用then,试图理解承诺[重复]

Posted

技术标签:

【中文标题】获取api,为啥我必须在响应json()上使用then,试图理解承诺[重复]【英文标题】:Fetch api, why do I have to use then on the response json(), trying to make sens of promises [duplicate]获取api,为什么我必须在响应json()上使用then,试图理解承诺[重复] 【发布时间】:2016-12-21 04:16:01 【问题描述】:

我试图理解 Promise,所以我在 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);  
        );
  );

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

【问题讨论】:

基本上,这样可以处理大于可用 RAM 的响应。顺便说一句,您不需要每个承诺的匿名包装器。写一两个可重用的助手来减少杂乱无章 【参考方案1】:

来自docs:

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

【讨论】:

以上是关于获取api,为啥我必须在响应json()上使用then,试图理解承诺[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Spyne:为啥我收到 json 请求的空响应?

为啥我不能用我的 api 响应更新我的状态?数据是一个对象数组

使用 Laravel 从 API 获取 JSON 响应

删除 [ ] 包装 json 响应

我无法从 python 中的 JSON API 响应中获取值

仍然使用同源策略 为啥 JSON 响应在 https 链接上使用 jquery ajax 是空白的?