Microsoft Edge中来自Stream的新响应

时间:2018-03-13 08:31:50

标签: javascript stream response microsoft-edge

有人知道如何从Microsoft Edge中的Response创建新的ReadableStream吗?

对于Chrome,这很简单。您可以只使用ReadableStream并将其作为第一个参数在Response的构造函数中传递。例如,通过这种方式,您可以创建一个新的Response,其中包含来自网络响应的另一个状态代码,而无需复制响应:

fetch('https://www.baqend.com/')
  .then(res => new Response(res.body, { status: 222 }))
  .then(it => it.text())
  .then(it => console.log('Text prefix ' + it.substr(0,16)))
  .catch(it => console.log('error: ' + it))

虽然这在Chrome中完美运行,但Edge不支持ReadableStream作为Response构造函数的输入。我在Edge中使用它的唯一方法是首先获得文本响应(有效地复制响应并阻止流):

fetch('https://www.baqend.com/')
  .then(it => it.text())
  .then(text => new Response(text, { status: 222 }))
  .then(it => it.text())
  .then(it => console.log('Text prefix ' + it.substr(0,16)))
  .catch(it => console.log('error: ' + it))

有没有人知道从Edge中的可读流创建新响应的方法?

PS:我正在使用Microsoft Edge 42.17115.1.0(最新的开发者预览版,因为我正在测试服务工作者)

PPS:第一个代码在firefox中不起作用,因为firefox不支持从RedableStream获取Response.body。 Edge确实会公开Response.body

1 个答案:

答案 0 :(得分:0)

尝试一下:

https://www.npmjs.com/package/web-streams-polyfill

var streams = require("web-streams-polyfill");
var readable = new streams.ReadableStream;

// Or, in ES6

import { ReadableStream } from "web-streams-polyfill";