Add try-catch to async IIFEs to prevent unhandled rejections

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-07 18:11:27 +08:00
parent ede7becb3a
commit 7d5918837b
5 changed files with 224 additions and 204 deletions

View File

@@ -1241,53 +1241,56 @@ function getAvgProcessTimeHorizontalBarChart(chartData, content, isSingle, xUnit
// Created logic // Created logic
(async () => { (async () => {
isLoading.value = true; isLoading.value = true;
try {
const routeParams = route.params;
const primaryType = routeParams.primaryType;
const secondaryType = routeParams.secondaryType;
const primaryId = routeParams.primaryId;
const secondaryId = routeParams.secondaryId;
const typeMap = {
'log': 'log_id',
'filter': 'filter_id'
};
const primaryTypeParam = typeMap[primaryType];
const secondaryTypeParam = typeMap[secondaryType];
const queryParams = [
{ [primaryTypeParam]: primaryId },
{ [secondaryTypeParam]: secondaryId }
];
const routeParams = route.params; // 取得 Compare Data
const primaryType = routeParams.primaryType; await compareStore.getCompare(queryParams);
const secondaryType = routeParams.secondaryType; avgProcessTimeByTaskHeight.value = getHorizontalBarHeight(compareDashboardData.value.time.avg_process_time_by_task);
const primaryId = routeParams.primaryId; if(compareDashboardData.value.time.avg_waiting_time_by_edge !== null) {
const secondaryId = routeParams.secondaryId; avgWaitingTimeByEdgeHeight.value = getHorizontalBarHeight(compareDashboardData.value.time.avg_waiting_time_by_edge);
const typeMap = { };
'log': 'log_id', casesByTaskHeight.value = getHorizontalBarHeight(compareDashboardData.value.freq.cases_by_task);
'filter': 'filter_id' // create chart
}; [avgCycleTimeData.value, avgCycleTimeOptions.value] = getLineChart(
const primaryTypeParam = typeMap[primaryType]; compareDashboardData.value.time.avg_cycle_time, contentData.avgCycleTime, 'date');
const secondaryTypeParam = typeMap[secondaryType]; [avgCycleEfficiencyData.value, avgCycleEfficiencyOptions.value] = getBarChart(
const queryParams = [ compareDashboardData.value.time.avg_cycle_efficiency, contentData.avgCycleEfficiency, "Cycle Eff");
{ [primaryTypeParam]: primaryId }, [avgProcessTimeData.value, avgProcessTimeOptions.value] = getLineChart(
{ [secondaryTypeParam]: secondaryId } compareDashboardData.value.time.avg_process_time, contentData.avgProcessTime, 'date');
]; [avgProcessTimeByTaskData.value, avgProcessTimeByTaskOptions.value] = getAvgProcessTimeHorizontalBarChart(
compareDashboardData.value.time.avg_process_time_by_task,
// 取得 Compare Data contentData.avgProcessTimeByTask, true, 'date');
await compareStore.getCompare(queryParams); [avgWaitingTimeData.value, avgWaitingTimeOptions.value] = getLineChart(
avgProcessTimeByTaskHeight.value = getHorizontalBarHeight(compareDashboardData.value.time.avg_process_time_by_task); compareDashboardData.value.time.avg_waiting_time, contentData.avgWaitingTime, 'date');
if(compareDashboardData.value.time.avg_waiting_time_by_edge !== null) { if(compareDashboardData.value.time.avg_waiting_time_by_edge !== null) {
avgWaitingTimeByEdgeHeight.value = getHorizontalBarHeight(compareDashboardData.value.time.avg_waiting_time_by_edge); [avgWaitingTimeByEdgeData.value, avgWaitingTimeByEdgeOptions.value] = getHorizontalBarChart(
}; compareDashboardData.value.time.avg_waiting_time_by_edge,
casesByTaskHeight.value = getHorizontalBarHeight(compareDashboardData.value.freq.cases_by_task); contentData.avgWaitingTimeByEdge, false, 'date');
// create chart } else {
[avgCycleTimeData.value, avgCycleTimeOptions.value] = getLineChart( [avgWaitingTimeByEdgeData.value, avgWaitingTimeByEdgeOptions.value] = [null, null]
compareDashboardData.value.time.avg_cycle_time, contentData.avgCycleTime, 'date'); }
[avgCycleEfficiencyData.value, avgCycleEfficiencyOptions.value] = getBarChart( [freqData.value, freqOptions.value] = getLineChart(
compareDashboardData.value.time.avg_cycle_efficiency, contentData.avgCycleEfficiency, "Cycle Eff"); compareDashboardData.value.freq.cases, contentData.freq, 'count');
[avgProcessTimeData.value, avgProcessTimeOptions.value] = getLineChart( [casesByTaskData.value, casesByTaskOptions.value] = getCaseByTaskHorizontalBarChart(
compareDashboardData.value.time.avg_process_time, contentData.avgProcessTime, 'date'); compareDashboardData.value.freq.cases_by_task, contentData.casesByTask, true, 'count');
[avgProcessTimeByTaskData.value, avgProcessTimeByTaskOptions.value] = getAvgProcessTimeHorizontalBarChart( } catch (error) {
compareDashboardData.value.time.avg_process_time_by_task, console.error('Failed to initialize compare dashboard:', error);
contentData.avgProcessTimeByTask, true, 'date');
[avgWaitingTimeData.value, avgWaitingTimeOptions.value] = getLineChart(
compareDashboardData.value.time.avg_waiting_time, contentData.avgWaitingTime, 'date');
if(compareDashboardData.value.time.avg_waiting_time_by_edge !== null) {
[avgWaitingTimeByEdgeData.value, avgWaitingTimeByEdgeOptions.value] = getHorizontalBarChart(
compareDashboardData.value.time.avg_waiting_time_by_edge,
contentData.avgWaitingTimeByEdge, false, 'date');
} else {
[avgWaitingTimeByEdgeData.value, avgWaitingTimeByEdgeOptions.value] = [null, null]
} }
[freqData.value, freqOptions.value] = getLineChart(
compareDashboardData.value.freq.cases, contentData.freq, 'count');
[casesByTaskData.value, casesByTaskOptions.value] = getCaseByTaskHorizontalBarChart(
compareDashboardData.value.freq.cases_by_task, contentData.casesByTask, true, 'count');
})(); })();
// Mounted // Mounted

View File

@@ -487,54 +487,59 @@ function setActivityBgImage(mapData) {
// Created logic // Created logic
(async () => { (async () => {
const routeParams = route.params; try {
const file = route.meta.file; const routeParams = route.params;
const isCheckPage = route.name.includes('Check'); const file = route.meta.file;
const isCheckPage = route.name.includes('Check');
isLoading.value = true; isLoading.value = true;
switch (routeParams.type) { switch (routeParams.type) {
case 'log': case 'log':
if (!isCheckPage) { if (!isCheckPage) {
logId.value = routeParams.fileId; logId.value = routeParams.fileId;
baseLogId.value = routeParams.fileId; baseLogId.value = routeParams.fileId;
} else { } else {
logId.value = file.parent.id; logId.value = file.parent.id;
baseLogId.value = file.parent.id; baseLogId.value = file.parent.id;
} }
break; break;
case 'filter': case 'filter':
if (!isCheckPage) { if (!isCheckPage) {
createFilterId.value = routeParams.fileId; createFilterId.value = routeParams.fileId;
} else { } else {
createFilterId.value = file.parent.id; createFilterId.value = file.parent.id;
} }
await allMapDataStore.fetchFunnel(createFilterId.value); await allMapDataStore.fetchFunnel(createFilterId.value);
isRuleData.value = Array.from(temporaryData.value); isRuleData.value = Array.from(temporaryData.value);
ruleData.value = isRuleData.value.map(e => sidebarFilterRefComp.value.setRule(e)); ruleData.value = isRuleData.value.map(e => sidebarFilterRefComp.value.setRule(e));
break; break;
}
await allMapDataStore.getAllMapData();
await allMapDataStore.getAllTrace();
traceId.value = traces.value[0]?.id;
baseTraceId.value = baseTraces.value[0]?.id;
await createCy(mapType.value);
await allMapDataStore.getFilterParams();
await allMapDataStore.getTraceDetail();
emitter.on('saveModal', boolean => {
sidebarView.value = boolean;
sidebarFilter.value = boolean;
sidebarTraces.value = boolean;
sidebarState.value = boolean;
});
emitter.on('leaveFilter', boolean => {
sidebarView.value = boolean;
sidebarFilter.value = boolean;
sidebarTraces.value = boolean;
sidebarState.value = boolean;
});
} catch (error) {
console.error('Failed to initialize map compare:', error);
} finally {
isLoading.value = false;
} }
await allMapDataStore.getAllMapData();
await allMapDataStore.getAllTrace();
traceId.value = traces.value[0]?.id;
baseTraceId.value = baseTraces.value[0]?.id;
await createCy(mapType.value);
await allMapDataStore.getFilterParams();
await allMapDataStore.getTraceDetail();
isLoading.value = false;
emitter.on('saveModal', boolean => {
sidebarView.value = boolean;
sidebarFilter.value = boolean;
sidebarTraces.value = boolean;
sidebarState.value = boolean;
});
emitter.on('leaveFilter', boolean => {
sidebarView.value = boolean;
sidebarFilter.value = boolean;
sidebarTraces.value = boolean;
sidebarState.value = boolean;
});
})(); })();
onBeforeUnmount(() => { onBeforeUnmount(() => {

View File

@@ -66,35 +66,39 @@ const { conformanceLogId, conformanceFilterId, conformanceLogCreateCheckId, conf
// Created logic // Created logic
(async () => { (async () => {
isLoading.value = true; isLoading.value = true;
try {
const params = route.params;
const file = route.meta.file;
const isCheckPage = route.name.includes('Check');
const params = route.params; if(!isCheckPage) {
const file = route.meta.file; switch (params.type) {
const isCheckPage = route.name.includes('Check'); case 'log':
conformanceLogId.value = params.fileId;
if(!isCheckPage) { break;
switch (params.type) { case 'filter':
case 'log': conformanceFilterId.value = params.fileId;
conformanceLogId.value = params.fileId; break;
break; }
case 'filter': } else {
conformanceFilterId.value = params.fileId; switch (params.type) {
break; case 'log':
conformanceLogId.value = file.parent.id;
conformanceFileName.value = file.name;
break;
case 'filter':
conformanceFilterId.value = file.parent.id;
conformanceFileName.value = file.name;
break;
}
await conformanceStore.getConformanceReport();
} }
} else { await conformanceStore.getConformanceParams();
switch (params.type) { } catch (error) {
case 'log': console.error('Failed to initialize conformance:', error);
conformanceLogId.value = file.parent.id; } finally {
conformanceFileName.value = file.name; setTimeout(() => isLoading.value = false, 500);
break;
case 'filter':
conformanceFilterId.value = file.parent.id;
conformanceFileName.value = file.name;
break;
}
await conformanceStore.getConformanceReport();
} }
await conformanceStore.getConformanceParams();
setTimeout(() => isLoading.value = false, 500);
})(); })();
// Mounted // Mounted

View File

@@ -470,54 +470,59 @@ function setActivityBgImage(mapData) {
// Created logic // Created logic
(async () => { (async () => {
const routeParams = route.params; try {
const file = route.meta.file; const routeParams = route.params;
const isCheckPage = route.name.includes('Check'); const file = route.meta.file;
const isCheckPage = route.name.includes('Check');
isLoading.value = true; isLoading.value = true;
switch (routeParams.type) { switch (routeParams.type) {
case 'log': case 'log':
if(!isCheckPage) { if(!isCheckPage) {
logId.value = routeParams.fileId; logId.value = routeParams.fileId;
baseLogId.value = routeParams.fileId; baseLogId.value = routeParams.fileId;
} else { } else {
logId.value = file.parent.id; logId.value = file.parent.id;
baseLogId.value = file.parent.id; baseLogId.value = file.parent.id;
} }
break; break;
case 'filter': case 'filter':
if(!isCheckPage) { if(!isCheckPage) {
createFilterId.value = routeParams.fileId; createFilterId.value = routeParams.fileId;
} else { } else {
createFilterId.value = file.parent.id; createFilterId.value = file.parent.id;
} }
await allMapDataStore.fetchFunnel(createFilterId.value); await allMapDataStore.fetchFunnel(createFilterId.value);
isRuleData.value = Array.from(temporaryData.value); isRuleData.value = Array.from(temporaryData.value);
ruleData.value = isRuleData.value.map(e => sidebarFilterRefComp.value.setRule(e)); ruleData.value = isRuleData.value.map(e => sidebarFilterRefComp.value.setRule(e));
break; break;
}
await allMapDataStore.getAllMapData();
await allMapDataStore.getAllTrace();
traceId.value = traces.value[0]?.id;
baseTraceId.value = baseTraces.value[0]?.id;
await createCy(mapType.value);
await allMapDataStore.getFilterParams();
await allMapDataStore.getTraceDetail();
emitter.on('saveModal', boolean => {
sidebarView.value = boolean;
sidebarFilter.value = boolean;
sidebarTraces.value = boolean;
sidebarState.value = boolean;
});
emitter.on('leaveFilter', boolean => {
sidebarView.value = boolean;
sidebarFilter.value = boolean;
sidebarTraces.value = boolean;
sidebarState.value = boolean;
});
} catch (error) {
console.error('Failed to initialize map:', error);
} finally {
isLoading.value = false;
} }
await allMapDataStore.getAllMapData();
await allMapDataStore.getAllTrace();
traceId.value = traces.value[0]?.id;
baseTraceId.value = baseTraces.value[0]?.id;
await createCy(mapType.value);
await allMapDataStore.getFilterParams();
await allMapDataStore.getTraceDetail();
isLoading.value = false;
emitter.on('saveModal', boolean => {
sidebarView.value = boolean;
sidebarFilter.value = boolean;
sidebarTraces.value = boolean;
sidebarState.value = boolean;
});
emitter.on('leaveFilter', boolean => {
sidebarView.value = boolean;
sidebarFilter.value = boolean;
sidebarTraces.value = boolean;
sidebarState.value = boolean;
});
})(); })();
onBeforeUnmount(() => { onBeforeUnmount(() => {

View File

@@ -905,51 +905,54 @@ function getAvgWaitingTimeLineChart(chartData, content, yUnit) {
// Created logic // Created logic
(async () => { (async () => {
isLoading.value = true; isLoading.value = true;
const routeParams = route.params; try {
const isCheckPage = route.name.includes('Check'); const routeParams = route.params;
const type = routeParams.type; const isCheckPage = route.name.includes('Check');
const file = route.meta.file; const type = routeParams.type;
let id; const file = route.meta.file;
let id;
if(!isCheckPage) { if(!isCheckPage) {
id = routeParams.fileId; id = routeParams.fileId;
} else { } else {
id = file.parent.id; id = file.parent.id;
} }
// 取得 Performance Data // 取得 Performance Data
await performanceStore.getPerformance(type, id); await performanceStore.getPerformance(type, id);
if(!performanceData.value?.time) { if(!performanceData.value?.time) {
return;
}
avgProcessTimeByTaskHeight.value = getHorizontalBarHeight(performanceData.value.time.avg_process_time_by_task);
if(performanceData.value.time.avg_waiting_time_by_edge !== null) {
avgWaitingTimeByEdgeHeight.value = getHorizontalBarHeight(performanceData.value.time.avg_waiting_time_by_edge);
}
casesByTaskHeight.value = getHorizontalBarHeight(performanceData.value.freq.cases_by_task);
// create chart
[avgCycleTimeData.value, avgCycleTimeOptions.value] = getExplicitDeclaredLineChart(performanceData.value.time.avg_cycle_time,
contentData.avgCycleTime, 'date');
[avgCycleEfficiencyData.value, avgCycleEfficiencyOptions.value] = getBarChart(
performanceData.value.time.avg_cycle_efficiency, contentData.avgCycleEfficiency);
[avgProcessTimeData.value, avgProcessTimeOptions.value] = getExplicitDeclaredLineChart(performanceData.value.time.avg_process_time,
contentData.avgProcessTime, 'date');
[avgProcessTimeByTaskData.value, avgProcessTimeByTaskOptions.value] = getHorizontalBarChart(
performanceData.value.time.avg_process_time_by_task, contentData.avgProcessTimeByTask, true, 'date');
[avgWaitingTimeData.value, avgWaitingTimeOptions.value] = getExplicitDeclaredLineChart(
performanceData.value.time.avg_waiting_time, contentData.avgWaitingTime, 'date');
if(performanceData.value.time.avg_waiting_time_by_edge !== null) {
[avgWaitingTimeByEdgeData.value, avgWaitingTimeByEdgeOptions.value] = getHorizontalBarChart(
performanceData.value.time.avg_waiting_time_by_edge, contentData.avgWaitingTimeByEdge, false, 'date');
} else {
[avgWaitingTimeByEdgeData.value, avgWaitingTimeByEdgeOptions.value] = [null, null]
}
[casesByTaskData.value, casesByTaskOptions.value] = getHorizontalBarChart(performanceData.value.freq.cases_by_task,
contentData.casesByTask, true, 'count');
} catch (error) {
console.error('Failed to initialize performance:', error);
} finally {
isLoading.value = false; isLoading.value = false;
return;
} }
avgProcessTimeByTaskHeight.value = getHorizontalBarHeight(performanceData.value.time.avg_process_time_by_task);
if(performanceData.value.time.avg_waiting_time_by_edge !== null) {
avgWaitingTimeByEdgeHeight.value = getHorizontalBarHeight(performanceData.value.time.avg_waiting_time_by_edge);
}
casesByTaskHeight.value = getHorizontalBarHeight(performanceData.value.freq.cases_by_task);
// create chart
[avgCycleTimeData.value, avgCycleTimeOptions.value] = getExplicitDeclaredLineChart(performanceData.value.time.avg_cycle_time,
contentData.avgCycleTime, 'date');
[avgCycleEfficiencyData.value, avgCycleEfficiencyOptions.value] = getBarChart(
performanceData.value.time.avg_cycle_efficiency, contentData.avgCycleEfficiency);
[avgProcessTimeData.value, avgProcessTimeOptions.value] = getExplicitDeclaredLineChart(performanceData.value.time.avg_process_time,
contentData.avgProcessTime, 'date');
[avgProcessTimeByTaskData.value, avgProcessTimeByTaskOptions.value] = getHorizontalBarChart(
performanceData.value.time.avg_process_time_by_task, contentData.avgProcessTimeByTask, true, 'date');
[avgWaitingTimeData.value, avgWaitingTimeOptions.value] = getExplicitDeclaredLineChart(
performanceData.value.time.avg_waiting_time, contentData.avgWaitingTime, 'date');
if(performanceData.value.time.avg_waiting_time_by_edge !== null) {
[avgWaitingTimeByEdgeData.value, avgWaitingTimeByEdgeOptions.value] = getHorizontalBarChart(
performanceData.value.time.avg_waiting_time_by_edge, contentData.avgWaitingTimeByEdge, false, 'date');
} else {
[avgWaitingTimeByEdgeData.value, avgWaitingTimeByEdgeOptions.value] = [null, null]
}
[casesByTaskData.value, casesByTaskOptions.value] = getHorizontalBarChart(performanceData.value.freq.cases_by_task,
contentData.casesByTask, true, 'count');
// 停止 loading
isLoading.value = false;
})(); })();
</script> </script>
<style scoped> <style scoped>