用 js fetch 写一个 stream 请求的代码
2023-09-15 18:08:13
|
浏览 336
技术问题:使用 JavaScript 的 Fetch API 编写一个流式(stream)请求的代码。
在 JavaScript 中,使用 Fetch API 可以进行网络请求,包括流式请求。流式请求是一种逐步获取数据的方式,适用于处理大型文件或数据流。下面是用 JavaScript Fetch API 发起流式请求的代码示例:
复制代码
// 创建一个 ReadableStream 对象,用于流式请求
function createStream(url) {
// 创建一个 ReadableStream
const stream = new ReadableStream({
start(controller) {
// 发起 Fetch 请求
fetch(url)
.then((response) => {
const reader = response.body.getReader();
function push() {
// 读取数据
return reader.read().then(({ done, value }) => {
// 如果读取完成,则关闭流
if (done) {
controller.close();
return;
}
// 将数据块传递给流
controller.enqueue(value);
// 继续读取下一个数据块
return push();
});
}
return push();
})
.catch((error) => {
// 发生错误时,中断流并抛出异常
controller.error(error);
});
},
});
return new Response(stream, { headers: { "Content-Type": "application/octet-stream" } });
}
// 使用流式请求
const streamUrl = "http://example.com/stream"; // 替换为实际的流式请求 URL
fetch(createStream(streamUrl)).then((response) => {
// 通过 response.body.getReader().read() 逐步获取数据
const reader = response.body.getReader();
function process() {
return reader.read().then(({ done, value }) => {
// 处理数据,例如将数据分块显示在页面上
console.log(value);
if (done) {
// 数据处理完成
console.log("Stream processing finished.");
return;
}
// 继续处理下一个数据块
return process();
});
}
return process();
});
上述代码中,createStream 函数用于创建一个可读流 (ReadableStream) 对象,并基于 Fetch API 发起请求。createStream 函数接受一个 URL 参数用于指定流式请求的地址。
在使用流式请求时,我们可以通过 response.body.getReader() 获取一个 ReadableStreamDefaultReader 对象,然后使用 reader.read() 逐步读取数据。在示例代码中的 process 函数中,我们通过递归调用 reader.read() 来逐步处理数据,直到数据全部读取完成。
请注意,以上代码仅作为示例,实际应用中需要根据具体需求进行适当修改和错误处理。
希望这篇文章能帮助到你,如果还有其他技术问题,欢迎继续提问。
我要提问
复制内容
分享给好友
AI编程问答网 免责声明:
以上内容除特别注明外均来源于网友提问,AI编程问答网回答,权益归原著者所有;
上一篇:数据结构与算法:10种常见算法