feat: 前端改为轮询模式

This commit is contained in:
zerosaturation 2026-04-08 00:07:08 +08:00
parent e834029f6a
commit 965c37f2ff

View File

@ -91,59 +91,107 @@ const revertProgress = () => {
}, 100); }, 100);
}; };
// API // job_id
let jobId = null;
// API -
const callImageGeneration = async () => { const callImageGeneration = async () => {
try { try {
const res = await imageGenerationApi(generationData); const res = await imageGenerationApi(generationData);
if (res.data && res.data.base_resp && res.data.base_resp.status_code === 0) { if (res.data && res.data.job_id) {
console.log('[GenerationLoading] 图生图成功:', res); jobId = res.data.job_id;
console.log('[GenerationLoading] 任务已创建:', jobId);
//
pollJobStatus();
} else {
uni.showToast({
title: '创建任务失败',
icon: 'none',
duration: 2000
});
revertProgress();
}
} catch (err) {
console.error('[GenerationLoading] 创建任务失败:', err);
uni.showToast({
title: '创建任务失败',
icon: 'none',
duration: 2000
});
revertProgress();
}
};
// //
const imageUrls = res.data.data?.image_urls || []; const pollJobStatus = () => {
let pollCount = 0;
const maxPolls = 40; // 120 / 3 = 40
if (imageUrls.length > 0) { const poll = async () => {
// base64 if (!jobId) return;
const processedImages = imageUrls.map(base64Data => {
// data URL
if (base64Data.startsWith('data:image')) {
return base64Data;
}
// data URL
return `data:image/png;base64,${base64Data}`;
});
// try {
uni.setStorageSync('generated_images', JSON.stringify(processedImages)); const res = await uni.request({
url: 'http://192.168.110.60:8080' + `/api/v1/assets/mints/image/generation/${jobId}`,
method: 'GET',
header: {
'Authorization': `Bearer ${uni.getStorageSync('access_token')}`
}
});
// const data = res.data?.data;
completeProgress(); if (data) {
} else { //
uni.showToast({ if (data.progress) {
title: '未生成图片', progress.value = Math.min(data.progress, 90);
icon: 'none', }
duration: 2000
}); if (data.status === 'COMPLETED') {
revertProgress(); //
} const imageUrls = data.images || [];
} else { if (imageUrls.length > 0) {
// 退 uni.setStorageSync('generated_images', JSON.stringify(imageUrls));
uni.showToast({ completeProgress();
title: res.data?.base_resp?.status_msg || '生成失败', } else {
icon: 'none', uni.showToast({ title: '未生成图片', icon: 'none' });
duration: 2000 revertProgress();
}); }
revertProgress(); return;
} } else if (data.status === 'FAILED') {
} catch (err) { //
console.error('[GenerationLoading] 图生图失败:', err); uni.showToast({
uni.showToast({ title: data.error_msg || '生成失败',
title: '生成失败', icon: 'none',
icon: 'none', duration: 2000
duration: 2000 });
}); revertProgress();
revertProgress(); return;
} }
}
pollCount++;
if (pollCount >= maxPolls) {
uni.showToast({ title: '生成超时,请重试', icon: 'none' });
revertProgress();
return;
}
// 3
setTimeout(poll, 3000);
} catch (err) {
console.error('[GenerationLoading] 轮询失败:', err);
pollCount++;
if (pollCount >= maxPolls) {
uni.showToast({ title: '查询失败,请重试', icon: 'none' });
revertProgress();
} else {
setTimeout(poll, 3000);
}
}
};
poll();
}; };
// //