从 fetch -> promise -> response 获取数据

问题描述 投票:0回答:2

我正在尝试将一些数据发布到服务器,但我不知道如何取回响应数据。

我有以下代码:

fetch(url, {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    email: login,
    password: password,
  })
}).then(function(a){
  console.log(a);
})

它打印一个

Response
它包含数据,例如 body (ReadableByteStream), bodyUsed (false), ok (true), status (200),... 但我找不到我取回的数据,无处可寻。当我打开 chrome 开发人员控制台 - 网络时,我在那里看到了响应数据。

我做错了什么?

我一直在寻找一些资源如何获取,承诺,......工作,但我找不到任何写得好的。

javascript ecmascript-6 es6-promise fetch-api
2个回答
34
投票

还有其他方法可以调用获取响应,例如

.json()
.blob()
。这些方法返回一个承诺,您可以调用
.then()
on.

fetch(url, {
    method: 'POST',
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({
        email: login,
        password: password,
    })
})
    .then(function (a) {
        return a.json(); // call the json method on the response to get JSON
    })
    .then(function (json) {
        console.log(json)
    })

查看一些关于使用 fetch 的文档,以及一些关于response 对象如何在 fetch 调用中工作 的其他文档。


0
投票

fetch
返回
Promise
可以解析为具有多种方法的
Response
对象,如
text()
json()
blob()
,它也返回
Promise
String
/
Object
/
Blob
.

所以你必须 resolve promise 两次!!

fetch(...)
    .then((rsp) => rsp.json())
    .then((obj) => console.log(obj));
© www.soinside.com 2019 - 2024. All rights reserved.