![](/img/trans.png)
[英]Use Asynchronous ReadableStream with Response to return HTML from fetch event of Service Worker
[英]Use ReadableStream with Response to return HTML from fetch event of Service Worker
我正在尝试为服务工作者中的HTML
响应返回 stream,但浏览器似乎无法解析它(我正在使用 chrome 进行此测试)。
所以,这个有效(在fetch
事件中):
event.respondWith(new Response("<h1>Yellow!</h1>", { headers: { "Content-Type": "text/html" }}))
但是当我使用ReadableStream
它不再呈现在浏览器中:
const stream = new ReadableStream({
start(controller) {
controller.enqueue("<h1>Yellow!</h1>")
controller.close()
}
})
event.respondWith(new Response(stream, { headers: { "Content-Type": "text/html" }}))
似乎浏览器不明白我正在向它发送 stream。 但我不知道我需要使用什么标题,所以上述方法有效。
我用过的资源:
https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream#Examples
https://philipwalton.com/articles/smaller-html-payloads-with-service-workers/
更新
由于某种原因,当您不使用ReadableStream.getReader锁定 stream 时,它不起作用
此外,当您将ReadableStream
传递给Response
ctor时, Response.text方法不会处理 stream 而是返回 object 的toString()
。
const createStream = () => new ReadableStream({ start(controller) { controller.enqueue("<h1 style=\"background: yellow;\">Yellow.</h1>") controller.close() } }) const firstStream = createStream();getReader(). const secondStream = createStream();getReader(), new Response(firstStream: { headers: { "Content-Type". "text/html" } }).text().then(text => { console;log(text); }). secondStream.read(),then(({ value }) => { return new Response(value: { headers: { "Content-Type"; "text/html" } }). }).then(response => response.text()).then(text => { console;log(text); });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.