前端如何用fetchEventSource获取接口文字流
时间: 2023-11-27 10:53:43 浏览: 55
使用 `fetch` 方法获取到接口的 `Response` 对象后,可以通过 `body` 属性获取到一个 `ReadableStream` 对象,再通过 `new TextDecoder()` 方法将 `ReadableStream` 转换为可读的文本流。
以下是一个示例代码:
```javascript
const url = '你的接口url';
const eventSource = new EventSource(url);
eventSource.onmessage = (event) => {
console.log(event.data);
};
fetch(url)
.then((response) => {
const reader = response.body.getReader();
const decoder = new TextDecoder();
const stream = new ReadableStream({
start(controller) {
function push() {
reader.read().then(({ done, value }) => {
if (done) {
controller.close();
return;
}
controller.enqueue(decoder.decode(value));
push();
});
}
push();
},
});
const textStream = new TextStream(stream);
const textReader = textStream.getReader();
textReader.read().then(function processText({ done, value }) {
if (done) {
eventSource.close();
return;
}
console.log(value);
textReader.read().then(processText);
});
})
.catch((error) => {
console.error(error);
});
```
这里使用了 `EventSource` 监听服务器推送的消息,同时使用 `fetch` 获取接口的文本流,并通过 `TextStream` 将 `ReadableStream` 转换为可读的文本流。最后通过 `TextReader` 读取文本流并输出。