fix(MessageHandler): 优化网络连接中断的错误处理

- 在 readMessage 中增加对网络连接中断错误的处理逻辑
- 在 modelApi 中增加对不同错误类型的捕获和处理
- 优化错误信息提示,提高用户体验
refactor
钟良源 6 months ago
parent 6074d35ef8
commit df345447ca

@ -158,18 +158,27 @@ export class MessageHandler {
this.provider._postMessage({command: 'hideLoading'});
return;
}
// 如果是网络连接中断错误,我们仍然处理已接收的数据
if (readError.message.includes('terminated') || readError.message.includes('other side closed') || readError.name === 'TypeError') {
// 继续处理已接收的数据
console.log("网络连接中断,但将继续处理已接收的数据");
aiMessage += "```"
} else {
// 如果是其他错误,重新抛出
throw readError;
}
} finally {
// 清理reader引用
this.currentReader = null;
}
// console.log("aiMessage:",aiMessage)
// 流传输完成后,更新会话历史
currentSessionHistory = [...currentSessionHistory, {role: 'assistant', content: aiMessage}];
// 解析AI响应中的多个代码块并生成独立的codeDiff信息
const codeBlocks = aiMessage.match(/```[\s\S]*?```/g) || [];
// console.log("codeBlocks:",codeBlocks)
// 存储所有生成的codeDiff
const allCodeDiffs = [];
@ -184,6 +193,8 @@ export class MessageHandler {
}
}
// console.log("allCodeDiffs:",allCodeDiffs)
// 通知前端流传输完成
this.provider._postMessage({
@ -219,9 +230,20 @@ export class MessageHandler {
}
}
} catch (error: any) {
console.log("error:",error)
// 检查是否是由于取消请求导致的中断
if (error.name === 'AbortError' || error.message.includes('cancel') || error.message.includes('中断')) {
this.provider._postMessage({command: 'requestCancelled'});
} else if (error.message.includes('terminated') || error.message.includes('other side closed') || error.name === 'TypeError') {
// 处理网络连接中断错误,但仍显示已接收的内容
this.provider._postMessage({command: 'addMessage', role: 'ai', content: '网络连接中断,但以下为已接收的内容:'});
// 如果有已接收的内容,也显示出来
// 通知前端流传输完成
this.provider._postMessage({
command: 'endStream',
content: '',
codeDiffs: []
});
} else {
this.provider._postMessage({command: 'addMessage', role: 'ai', content: '调用失败:' + error.message});
}

@ -115,12 +115,18 @@ export async function callQwenAPI(
if (!response.ok) {
console.log("请求失败:", response)
throw new Error('API 请求失败');
throw new Error(`API 请求失败: ${response.status} ${response.statusText}`);
}
return response;
} catch (error: any) {
console.error(error);
// 提供更具体的错误信息
if (error.message.includes('terminated') || error.message.includes('other side closed')) {
throw new Error('网络连接中断,请检查网络状况或稍后重试。');
} else if (error.name === 'TypeError') {
throw new Error(`网络错误: ${error.message}`);
}
throw error;
}
}
Loading…
Cancel
Save