我能以某种方式在第一个“ then”中获取获取响应吗?

Džu*_*ris 2 javascript es6-promise fetch-api

我正在尝试使用Fetch API。从示例看来,GET请求需要then以某种方式解析响应。

目前我正在这样做

fetch(url)
    .then(response => response.json())
    .then(response => {
        console.log(response);  
    });
Run Code Online (Sandbox Code Playgroud)

但是,这首先then看起来像样板。我试图避免它,例如:

fetch(url)
    .then(response => {
        console.log(response.json());  
    });
Run Code Online (Sandbox Code Playgroud)

但是,这记录了我的Promise状态待定resolved

我阅读了有关该主题的其他问题,并阅读了一些有关Promise的信息,但我不知道是否有可能将其组合为一个then(如果这样-怎么做?)。

例如,这里的两个答案指出:

不需要使用多个“ .then”

没有充分的理由拥有两个.then()处理程序,因为每个处理程序中的代码都可以组合成单个.then()处理程序

但是我无法让那个例子真正起作用-我仍然有一个承诺:)

相反,这里被接受的答案解释了.then实际上对结果做了一些事情(提取了promise的回报),但是如果我能以某种方式自己做到这一点(response.json().then()或者说response.json().getVal()或者是double语法),我就无法理解then

Ter*_*rry 6

这很简单:调度fetch()请求时,它返回包含响应的Promise。首先解决.then()。解决这个第一个诺言实际上是回报Response

现在,这是棘手的部分:即读取响应的正文中的方法,无论是.json().text().blob().... 所有返回的承诺。这意味着您将需要解析第二个promise,以获得解析后的响应。

流程如下所示:

  1. 发出fetch()请求,并返回一个Promise类型Response
  2. 当您尝试解析Response的内容时,它将返回第二个Promise,其类型取决于您使用的方法(例如,.json()返回一个对象,.text()返回一个字符串,.blob()返回一个Blob)。
  3. 解决第二个Promise,您将获得实际的已分析响应正文