0 Tage Serie
javascript / intermediate
Snippet

Verwaltung gleichzeitiger Batch-Operationen mit Promise.allSettled und reaktivem Fortschritt

Beim gleichzeitigen Ausführen mehrerer asynchroner Anfragen stellt `Promise.allSettled()` sicher, dass alle Promises abgeschlossen werden, unabhängig von Einzelfehlern. Das Iterieren über die Ergebnisse mit `results.entries()` ermöglicht eine präzise Fehlerprotokollierung und reaktive Fortschrittsanzeigen, ohne beim ersten Fehler abzubrechen.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import { ref } from 'vue';
export function useBatchProcessor() {
const pendingCount = ref(0);
const failedTasks = ref([]);
async function executeBatch(tasks) {
pendingCount.value = tasks.length;
failedTasks.value = [];
const executionPromises = tasks.map(task => task());
const results = await Promise.allSettled(executionPromises);
for (const [index, result] of results.entries()) {
if (result.status === 'rejected') {
failedTasks.value.push({
taskId: index,
reason: result.reason instanceof Error ? result.reason.message : String(result.reason)
});
}
pendingCount.value -= 1;
}
return failedTasks.value.length === 0;
}
return { pendingCount, failedTasks, executeBatch };
}
vue
Erklärung
1
const results = await Promise.allSettled(executionPromises);
Wartet, bis alle gleichzeitigen asynchronen Operationen aufgelöst oder abgelehnt wurden, ohne vorzeitig abzubrechen.
2
for (const [index, result] of results.entries()) {
Iteriert über indizierte Ergebnisobjekte mit Status- und Werte- bzw. Ursacheneigenschaften.
3
if (result.status === 'rejected') {
Prüft den Status des abgeschlossenen Promises, um Ablehnungsgründe sicher zu erfassen.