请求流返回中的异常处理

· 1 min read

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

举个🌰

这里以axios为例。

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值获取不正确。

写在最后

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