修复网络波动造成的部分作品阻塞问题
This commit is contained in:
@@ -203,17 +203,44 @@ class DownloadService {
|
||||
eventSource.onmessage = (event) => {
|
||||
try {
|
||||
const data = JSON.parse(event.data);
|
||||
if (data.type === 'progress') {
|
||||
onProgress(data.data);
|
||||
|
||||
// 处理不同类型的SSE消息
|
||||
if (data.type === 'connected') {
|
||||
console.log('SSE连接已建立:', data.taskId);
|
||||
} else if (data.type === 'progress') {
|
||||
// 新的数据格式:data.task 包含任务信息
|
||||
if (data.task) {
|
||||
onProgress(data.task);
|
||||
}
|
||||
} else if (data.type === 'completed') {
|
||||
// 任务完成
|
||||
console.log('任务完成:', data.status);
|
||||
if (onComplete) {
|
||||
onComplete();
|
||||
}
|
||||
eventSource.close();
|
||||
} else if (data.type === 'timeout') {
|
||||
// 连接超时
|
||||
console.warn('SSE连接超时');
|
||||
if (onComplete) {
|
||||
onComplete();
|
||||
}
|
||||
eventSource.close();
|
||||
} else if (data.type === 'heartbeat') {
|
||||
// 心跳消息,不需要处理
|
||||
console.debug('收到SSE心跳');
|
||||
} else if (data.type === 'complete') {
|
||||
onProgress(data.data);
|
||||
// 兼容旧格式
|
||||
if (data.data) {
|
||||
onProgress(data.data);
|
||||
}
|
||||
if (onComplete) {
|
||||
onComplete();
|
||||
}
|
||||
eventSource.close();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('解析SSE数据失败:', error);
|
||||
console.error('解析SSE数据失败:', error, 'Raw data:', event.data);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -133,15 +133,21 @@ export const useDownloadStore = defineStore('download', () => {
|
||||
|
||||
console.log('开始SSE监听任务进度:', taskId);
|
||||
|
||||
// 添加超时处理
|
||||
// 添加超时处理 - 增加到60秒以匹配后端
|
||||
const timeoutId = setTimeout(() => {
|
||||
console.warn('SSE连接超时,关闭连接:', taskId);
|
||||
stopTaskStreaming(taskId);
|
||||
}, 30000); // 30秒超时
|
||||
}, 60000); // 60秒超时
|
||||
|
||||
const closeConnection = downloadService.streamTaskProgress(
|
||||
taskId,
|
||||
(task) => {
|
||||
// 验证task对象是否有效
|
||||
if (!task || !task.id) {
|
||||
console.error('收到无效的任务数据:', task);
|
||||
return;
|
||||
}
|
||||
|
||||
// console.log('收到SSE进度更新:', {
|
||||
// taskId,
|
||||
// status: task.status,
|
||||
|
||||
Reference in New Issue
Block a user