如何从ReadableStream对象中获取信息?

我使用的取回API,我没有看到这是清楚的从文档。

主体被返回为一个ReadableStream,我只是想访问这个流中的属性。在浏览器开发工具的Response下,我似乎以JavaScript对象的形式将这些信息组织成属性。

fetch('http://192.168.5.6:2000/api/car', obj)
    .then((res) => {
        if(!res.ok) {
            console.log("Failure:" + res.statusText);
            throw new Error('HTTP ' + res.status);
        } else {
            console.log("Success :" + res.statusText);
            return res.body // what gives?
        }
    })

当前回答

如果你只想要响应文本,不想将其转换为JSON,请使用https://developer.mozilla.org/en-US/docs/Web/API/Body/text,然后再使用它来获得承诺的实际结果:

fetch('city-market.md')
  .then(function(response) {
    response.text().then((s) => console.log(s));
  });

or

fetch('city-market.md')
  .then(function(response) {
    return response.text();
  })
  .then(function(myText) {
    console.log(myText);
  });

其他回答

有些人可能会发现一个异步的例子很有用:

var response = await fetch("https://httpbin.org/ip");
var body = await response.json(); // .json() is asynchronous and therefore must be awaited

json()将响应体从ReadableStream转换为json对象。

await语句必须被包装在一个异步函数中,但是你可以直接在Chrome的控制台上运行await语句(从版本62开始)。

在阅读下一篇文章之前,我有同样的问题超过12个小时,只是为了帮助任何人。当在你的_api页面中使用nextjs时,你需要使用json .stringify(whole-response),然后使用res.send(json .stringify(whole-response))将它发送回你的页面,当它在客户端收到时,你需要将它翻译回json格式,以便它可用。这可以通过阅读它们的序列化部分来计算。希望能有所帮助。

对于那些拥有ReadableStream并想要从中获取文本的人来说,一个简短的技巧是将其包装在一个新的Response(或Request)中,然后使用text方法:

let text = await new Response(yourReadableStream).text();

response.json()返回一个Promise。试一试……

res.json().then(body => console.log(body));

其中response是fetch(…)的结果

如果你只想要响应文本,不想将其转换为JSON,请使用https://developer.mozilla.org/en-US/docs/Web/API/Body/text,然后再使用它来获得承诺的实际结果:

fetch('city-market.md')
  .then(function(response) {
    response.text().then((s) => console.log(s));
  });

or

fetch('city-market.md')
  .then(function(response) {
    return response.text();
  })
  .then(function(myText) {
    console.log(myText);
  });