前端如何使用axios和ts接收 stream 接口的内容呢? post
时间: 2025-06-29 07:18:46 浏览: 11
### 使用 Axios 和 TypeScript 接收 Stream API 内容
为了实现通过 POST 请求接收流数据,在前端可以利用 Axios 的响应式特性以及 TypeScript 提供的类型安全机制。下面展示了一个具体的例子来说明如何设置这样的功能。
#### 创建自定义请求函数支持流传输
首先,创建一个专门用于处理流式响应的方法:
```typescript
import axios from 'axios';
// 定义泛型接口以适应不同类型的返回值
interface ResponseStream<T> {
data: T;
}
function requestStream<T>(url: string, config?: any): Promise<ResponseStream<T>> {
const fullPath = `/api/${url}`;
// 配置特定于流式的选项
const streamConfig = {
responseType: 'stream', // 设置响应类型为流
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${localStorage.getItem('token')}`
},
...config,
};
return new Promise((resolve, reject) => {
axios({
url: fullPath,
method: 'POST',
...streamConfig
}).then(response => resolve({data: response.data}))
.catch(error => reject(error));
});
}
```
此代码片段展示了如何构建一个能够发送带有认证头信息和其他必要参数的 POST 请求,并指定其期望接收到的是流形式的数据[^1]。
#### 处理来自服务器端的流事件
当涉及到实际读取和解析从服务器传来的流时,则需进一步操作所获得的结果对象。这里给出一段示范性的逻辑用来监听并逐步消费这些分片化的消息体:
```javascript
async function handleStreamingResponse() {
try {
const response = await requestStream<EventSourcePolyfillEvent>('your-endpoint');
let reader = response.data.getReader();
while(true){
const {done,value} = await reader.read();
if(done){
console.log("完成");
break;
}
// 解码二进制数组到字符串
var decoder = new TextDecoder();
var chunkString = decoder.decode(value);
processChunk(chunkString);
}
} catch (error) {
console.error(`Error during streaming:`, error);
}
}
function processChunk(chunk:string){
// 对每一块数据做相应处理...
console.log(`Received Chunk: `,chunk);
}
```
上述 JavaScript 片段中包含了两个主要部分:一是调用之前定义好的`requestStream()` 函数发起 HTTP 请求;二是通过循环迭代的方式不断获取由服务端推送过来的新鲜数据直到结束标志被触发为止[^2]。
阅读全文
相关推荐









