请求流返回中的异常处理

调用AI服务,经常需要处理流返回结果,当出现异常时也是需要流处理的,这点与非流情况下的异常处理有所不同。

举个🌰

这里以axios为例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
axios.post('http://api.com/v1/chat/completions', data, {
headers: {
Authorization: `Bearer xxxx`,
'Content-Type': 'application/json',
},
responseType: 'stream',
}).then(res => res.data)
.catch(async (e) => {
let error;
if (e.isAxiosError) {
let streamString = '';
await new Promise(resolve => {
e.response.data
.on('data', (utf8Chunk) => {
streamString += utf8Chunk;
})
.on('end', () => {
error = JSON.parse(streamString);
resolve();
});
})
} else {
error = e;
}
throw error;
});

可以看到stream情况下对于异常也要流方式处理,因为流处理是事件监听机制, 因此这里promise化处理了下,避免error值获取不正确。

写在最后

因此对于流处理下的异常处理需要注意下。