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.