14 mrt 2025·7 min leestijd

Achtergrondtaken met voortgangsupdates: UI-patronen die werken

Leer praktische patronen voor achtergrondtaken met voortgangsupdates: wachtrijen, statusmodellen, UI-berichten, annuleer- en retry-acties en foutrapportage.

Achtergrondtaken met voortgangsupdates: UI-patronen die werken

Waarom gebruikers vastlopen wanneer taken op de achtergrond draaien

Lange acties mogen de UI niet blokkeren. Mensen wisselen van tabblad, verliezen verbinding, klappen hun laptop dicht, of vragen zich gewoon af of er iets gebeurt. Als het scherm vastzit, gaan gebruikers gokken, en gokken leidt tot herhaalde klikken, dubbele verzendingen en supporttickets.

Goede achtergrondafhandeling gaat vooral over vertrouwen. Gebruikers willen drie dingen:

  • Een duidelijke status (queued, running, done)
  • Een gevoel voor tijd (zelfs een ruwe schatting)
  • Een duidelijke volgende stap (wachten, doorwerken, annuleren of later terugkomen)

Zonder die dingen kan de taak prima lopen, maar voelt de ervaring kapot.

Een veelgemaakte vergissing is een trage request behandelen als echte achtergrondwerk. Een trage request is nog steeds één webaanroep die de gebruiker laat wachten. Achtergrondwerk is anders: je start een job, krijgt direct een bevestiging, en de zware verwerking gebeurt ergens anders terwijl de UI bruikbaar blijft.

Voorbeeld: een gebruiker uploadt een CSV om klanten te importeren. Als de UI blokkeert, kunnen ze refreshen, opnieuw uploaden en duplicates maken. Als de import op de achtergrond start en de UI een jobkaart met voortgang en een veilige Annuleren-optie toont, kunnen ze doorwerken en later een helder resultaat terugzien.

Kernbouwstenen: jobs, queues, workers en status

Als mensen praten over achtergrondtaken met voortgangsupdates, bedoelen ze meestal vier onderdelen die samenwerken.

Een job is de eenheid werk: "importeer deze CSV", "genereer dit rapport" of "stuur 5.000 e-mails." Een queue is de wachtkamer waar jobs wachten tot ze verwerkt kunnen worden. Een worker haalt jobs uit de queue en doet het werk (één tegelijk of parallel).

Voor de UI is het belangrijkste de lifecycle state van de job. Houd de staten weinig en voorspelbaar:

  • Queued: geaccepteerd, wacht op een worker
  • Running: actief bezig
  • Done: succesvol afgerond
  • Failed: gestopt met een fout

Elke job heeft een job ID nodig (een unieke referentie). Wanneer de gebruiker op een knop klikt, geef die ID direct terug en toon een "Taak gestart"-rij in een takenpaneel.

Vervolgens heb je een manier nodig om te vragen: "Wat gebeurt er nu?" Dat is meestal een status-endpoint (of elke leesmethode) die de job ID neemt en de staat plus voortgangsdetails terugstuurt. De UI gebruikt dit om procenten, huidige stap en eventuele berichten te tonen.

Tot slot moet status in een duurzame opslag leven, niet alleen in geheugen. Workers crashen, apps herstarten en gebruikers refreshen pagina's. Duurzame opslag maakt voortgang en uitkomsten betrouwbaar. Sla minimaal op:

  • huidige staat en tijdstempels
  • voortgangswaarde (procent of aantallen)
  • resultaat-samenvatting (wat is gemaakt of veranderd)
  • foutdetails (voor debugging en gebruiksvriendelijke berichten)

Als je bouwt op een platform zoals AppMaster, behandel de statusopslag als elk ander datamodel: de UI leest het op via job ID en de worker werkt het bij terwijl hij door de job heenloopt.

Een queue-patroon kiezen dat bij je workload past

Het queue-patroon dat je kiest verandert hoe "eerlijk" en voorspelbaar je app aanvoelt. Als een taak achter veel ander werk zit, ervaren gebruikers willekeurige vertragingen, zelfs als het systeem gezond is. Dus queue-keuze is een UX-beslissing, niet alleen infrastructuur.

Een eenvoudige database-backed queue is vaak genoeg als het volume laag is, jobs kort zijn en je incidentele retries kunt tolereren. Het is makkelijk op te zetten, makkelijk te inspecteren en je houdt alles op één plek. Voorbeeld: een admin draait een nachtelijk rapport voor een klein team. Als het één keer herstart wordt, raakt niemand in paniek.

Meestal heb je een dedicated queuing-systeem nodig als doorvoer toeneemt, jobs zwaar worden of betrouwbaarheid essentieel is. Imports, videoprocessing, massanotificaties en workflows die door moeten lopen over restarts heen profiteren van isolatie, zichtbaarheid en veiliger retry-gedrag. Dit doet er toe voor gebruikers omdat mensen ontbrekende updates en vastgelopen staten opmerken.

De queue-structuur beïnvloedt ook prioriteiten. Eén queue is eenvoudiger, maar het mixen van snelle en trage taken kan snelle acties traag laten voelen. Gescheiden queues helpen wanneer gebruikersgestuurde taken direct moeten aanvoelen naast geplande batchtaken die kunnen wachten.

Stel concurrentielimieten doelbewust in. Te veel parallelisme kan je database overbelasten en voortgang schokkerig maken. Te weinig maakt het traag. Begin met een kleine, voorspelbare concurrentie per queue en verhoog alleen als je voltooiingstijden stabiel kunt houden.

Een voortgangsmodel ontwerpen dat je daadwerkelijk in de UI kunt tonen

Als je voortgangsmodel vaag is, voelt de UI ook vaag. Bepaal wat het systeem eerlijk kan rapporteren, hoe vaak het verandert en wat gebruikers met die informatie moeten doen.

Een eenvoudig status-schema dat de meeste jobs aankunnen ziet er zo uit:

  • state: queued, running, succeeded, failed, canceled
  • percent: 0–100 wanneer je het kunt meten
  • message: één korte zin die gebruikers begrijpen
  • timestamps: created, started, last_updated, finished
  • result_summary: aantallen zoals processed, skipped, errors

Definieer vervolgens wat "voortgang" betekent.

Procent werkt als er een echte noemer is (rijen in een bestand, e-mails om te sturen). Het misleidt wanneer het werk onvoorspelbaar is (wachten op een derde partij, variabele compute, dure queries). In die gevallen bouwt stapgebaseerde voortgang meer vertrouwen omdat het in duidelijke brokken vooruitgaat.

Een praktische regel:

  • Gebruik percent wanneer je eerlijk kunt rapporteren "X van Y".
  • Gebruik steps wanneer de duur onbekend is (Validate file, Import, Rebuild indexes, Finalize).
  • Gebruik indeterminate voortgang wanneer geen van beide mogelijk is, maar houd de boodschap fris.

Sla tussentijdse resultaten op terwijl de job loopt. Dan kan de UI iets nuttigs tonen voor de job klaar is, zoals een live foutentelling of een preview van wat er veranderd is. Voor een CSV-import kun je rows_read, rows_created, rows_updated, rows_rejected en de laatste foutmeldingen bewaren.

Dit is de basis voor achtergrondtaken met voortgangsupdates die gebruikers vertrouwen: de UI blijft rustig, cijfers blijven bewegen en de samenvatting "wat gebeurde er?" is klaar als de job eindigt.

Voortgangsupdates afleveren: polling, push en hybride

Make cancel and retry safe
Implementeer cancel-flags, idempotente stappen en duidelijke staten in één visuele logica-stroom.
Build Logic

Het van backend naar scherm krijgen van voortgang is waar veel implementaties stuklopen. Kies een aflevermethode die past bij hoe vaak voortgang verandert en hoeveel gebruikers erop letten.

Polling is het eenvoudigst: de UI vraagt elke N seconden om status. Een goed startpunt is 2 tot 5 seconden terwijl de gebruiker actief naar de pagina kijkt, en dan terugschalen in de tijd. Als de taak langer dan een minuut duurt, ga naar 10–30 seconden. Als het tabblad op de achtergrond staat, vertraag nog meer.

Push-updates (WebSockets, server-sent events of mobiele notificaties) helpen wanneer voortgang snel verandert of gebruikers directheid willen. Push is goed voor immediacy, maar je hebt nog steeds een fallback nodig als de verbinding wegvalt.

Een hybride aanpak is vaak het beste: poll snel in het begin (zodat de UI snel ziet dat queued naar running gaat), en vertraag zodra de job stabiel is. Als je push toevoegt, behoud dan een langzamere poll als veiligheidsnet.

Wanneer updates stoppen, behandel dat als een volwaardige staat. Toon "Last updated 2 minutes ago" en bied een verversoptie. Op de backend markeer je jobs als stale als ze geen heartbeat meer hebben.

UI-patronen voor langlopende taken die helder aanvoelen

Helderheid komt van twee dingen: een klein setje voorspelbare staten en copy die mensen vertelt wat er daarna gebeurt.

Noem de staten in de UI, niet alleen in de backend. Een job kan queued zijn (wacht op zijn beurt), running (bezig), waiting for input (wacht op keuze), completed, completed with errors, of failed. Als gebruikers die niet kunnen onderscheiden, denken ze dat de app vastzit.

Gebruik platte, nuttige copy naast de voortgangsindicator. "Importing 3.200 rows (1.140 processed)" is beter dan "Processing." Voeg één zin toe die antwoordt: kan ik weggaan en wat gebeurt er? Bijvoorbeeld: "Je kunt dit venster sluiten. We blijven importeren op de achtergrond en melden het als het klaar is."

Waar voortgang zichtbaar is moet overeenkomen met de context van de gebruiker:

  • Een modal werkt als de taak de volgende stap blokkeert (bijv. een factuur-PDF genereren die ze nu nodig hebben).
  • Een toast werkt voor korte taken die niet mogen onderbreken.
  • Inline voortgang in een tabelrij werkt voor per-item bewerkingen.

Voor alles langer dan een minuut, voeg een eenvoudige Jobs-pagina (of Activity-paneel) toe zodat mensen later werk kunnen terugvinden.

Een duidelijke UI voor langlopende taken bevat meestal een statuslabel met laatste update-tijd, een voortgangsbalk (of stappen) met één regel detail, een veilige Annuleren-gedrag en een resultatengebied met samenvatting en volgende actie. Houd voltooide jobs vindbaar zodat gebruikers niet gedwongen worden te wachten op één scherm.

"Finished with errors" rapporteren zonder gebruikers te verwarren

Deploy your job system anywhere
Draai op AppMaster Cloud of exporteer broncode voor je eigen infrastructuur.
Deploy App

"Finished" is niet altijd een succes. Als een achtergrondjob 9.500 records verwerkt en 120 falen, moeten gebruikers begrijpen wat er gebeurde zonder logs te lezen.

Behandel gedeeltelijk succes als een volwaardige uitkomst. Toon in de hoofdstatusregel beide kanten: "Imported 9.380 of 9.500. 120 failed." Dat houdt vertrouwen hoog omdat het systeem eerlijk is en bevestigt dat er werk is opgeslagen.

Toon daarna een klein foutoverzicht dat gebruikers kan helpen: "Missing required field (63)" en "Invalid date format (41)." In de eindstaat is "Completed with issues" vaak duidelijker dan "Failed," omdat het niet impliceert dat niets werkte.

Een exporteerbaar foutrapport verandert verwarring in een to-do lijst. Houd het simpel: rij- of item-ID, foutcategorie, een menselijk bericht en de veldnaam wanneer relevant.

Maak de volgende stap duidelijk en dicht bij de samenvatting: data herstellen en opnieuw proberen voor gefaalde items, het foutrapport downloaden, of contact opnemen met support als het op een systeemprobleem lijkt.

Annuleren en opnieuw proberen: acties die gebruikers kunnen vertrouwen

Annuleren en opnieuw proberen lijken simpel, maar ze verliezen vertrouwen snel als de UI iets zegt en het systeem iets anders doet. Definieer wat Annuleren betekent voor elk jobtype en reflecteer dat eerlijk in de interface.

Gewoonlijk zijn er twee geldige annulatiemodi:

  • "Stop now": de worker controleert vaak een cancel-flag en stopt snel.
  • "Stop after this step": de huidige stap loopt af en de job stopt voordat de volgende stap start.

Toon in de UI een tussenstaat zoals "Cancel requested" zodat gebruikers niet blijven klikken.

Maak annuleren veilig door het werk herhaalbaar te maken. Als een job data schrijft, geef de voorkeur aan idempotente operaties (veilig om twee keer uit te voeren) en doe waar nodig cleanup. Bijvoorbeeld: als een CSV-import records aanmaakt, sla een job-run-ID op zodat je kunt terugzien wat er veranderd is in run #123.

Retry heeft dezelfde duidelijkheid nodig. Retry van hetzelfde job-voorbeeld kan zinvol zijn als het kan hervatten. Een nieuwe job-aanmaak is veiliger als je een schone run wilt met een nieuwe timestamp en audittrail. Leg in beide gevallen uit wat er zal gebeuren en wat niet.

Bewakingen die annuleren en retry voorspelbaar houden:

  • Beperk retries en toon het aantal.
  • Voorkom dubbele runs door Retry uit te schakelen terwijl een job draait.
  • Vraag om bevestiging wanneer retry dubbele bijeffecten kan veroorzaken (e-mails, betalingen, exports).
  • Toon de laatste fout en de laatste succesvolle stap in een detailpaneel.

Stap-voor-stap: een end-to-end flow van klik tot voltooiing

Design honest progress updates
Gebruik procenten of stapstatussen die je betrouwbaar kunt opslaan en tonen op web en mobiel.
Try AppMaster

Een goede end-to-end flow begint met één regel: de UI mag nooit wachten op het werk zelf. Alleen op een job-ID.

De flow (van gebruiker-klikt tot eindstaat)

  1. Gebruiker start de taak, API antwoordt snel. Wanneer de gebruiker op Import of Generate report klikt, maakt je server direct een job-record en geeft een unieke job-ID terug.

  2. Plaats het werk in de queue en zet de eerste status. Zet de job-ID in een queue en zet status op queued met 0% voortgang. Dit geeft de UI iets reëels om te tonen voordat een worker het oppakt.

  3. Worker draait en rapporteert voortgang. Wanneer een worker start, zet status op running, sla een starttijd op en update voortgang in kleine, eerlijke stappen. Als je geen procent kunt meten, toon dan stappen als Parsing, Validating, Saving.

  4. UI houdt de gebruiker georiënteerd. De UI pollet of abonneert op updates en rendert duidelijke staten. Toon een korte boodschap (wat er nu gebeurt) en alleen acties die nu logisch zijn.

  5. Finalizeer met een duurzaam resultaat. Bij voltooiing sla je eindtijd, output (downloadreferentie, aangemaakte IDs, samenvattende aantallen) en foutdetails op. Ondersteun finished-with-errors als aparte uitkomst, niet als vage succesmelding.

Annuleer- en retryregels

Annuleren moet expliciet zijn: Cancel-job vraagt annulering aan, de worker erkent en markeert canceled. Retry moet een nieuwe job-ID aanmaken, het origineel als geschiedenis behouden en uitleggen wat opnieuw wordt uitgevoerd.

Voorbeeldscenario: CSV-import met voortgang en gedeeltelijke fouten

Turn polling into a pattern
Stel een eenvoudig status-endpoint in en een UI-herlaadritme dat responsief blijft.
Build Now

Een veelvoorkomende plek waar achtergrondtaken met voortgangsupdates belangrijk zijn is een CSV-import. Stel je een CRM voor waar een sales ops-medewerker customers.csv uploadt met 8.420 rijen.

Direct na upload moet de UI schakelen van "Ik klikte op een knop" naar "er bestaat een job en je kunt weggaan." Een eenvoudige jobkaart in een Imports-pagina werkt goed:

  • Upload ontvangen: "File uploaded. Validating columns..."
  • Queued: "Waiting for an available worker (2 jobs ahead)."
  • Running: "Importing customers: 3.180 of 8.420 processed (38%)."
  • Wrapping up: "Saving results and building a report..."

Tijdens het draaien, toon één voortgangsgetal dat gebruikers kunnen vertrouwen (aantal verwerkte rijen) en één korte statusregel (wat het nu doet). Als de gebruiker wegnavigeert, houd de job zichtbaar in een Recent jobs-gebied.

Voeg nu gedeeltelijke fouten toe. Wanneer de job voltooit, vermijd een enge Failed-banner als de meeste rijen goed zijn. Gebruik Finished with issues plus een duidelijke splitsing:

Imported 8.102 customers. Skipped 318 rows.

Leg de belangrijkste redenen in gewone woorden uit: ongeldig e-mailformaat, ontbrekend verplicht veld zoals company, of dubbele externe IDs. Laat de gebruiker het foutbestand downloaden of een fouttabel bekijken met rijnummer, klantnaam en het exacte veld dat gerepareerd moet worden.

Retry moet veilig en specifiek aanvoelen. De primaire actie kan Retry failed rows zijn, die een nieuwe job aanmaakt die alleen de 318 overgeslagen rijen opnieuw verwerkt nadat de gebruiker het CSV-bestand heeft gerepareerd. Houd de originele job read-only zodat de geschiedenis eerlijk blijft.

Maak resultaten ten slotte makkelijk terug te vinden. Elke import hoort een stabiele samenvatting te hebben: wie het draaide, wanneer, bestandsnaam, aantallen (imported, skipped) en een manier om het foutrapport te openen.

Veelvoorkomende fouten die tot verwarrende voortgang en retries leiden

De snelste manier om vertrouwen te verliezen is cijfers tonen die niet kloppen. Een voortgangsbalk die twee minuten op 0% blijft en dan naar 90% springt voelt als gokken. Als je geen echte procent weet, toon dan stappen (Queued, Processing, Finalizing) of "X of Y items processed."

Een andere veelgemaakte fout is voortgang alleen in geheugen opslaan. Als de worker herstart, vergeet de UI de job of reset de voortgang. Sla jobstatus in duurzame opslag en laat de UI van die ene bron van waarheid lezen.

Retry-UX breekt ook als gebruikers hetzelfde job meerdere keren kunnen starten. Als de Import CSV-knop actief blijft, klikt iemand twee keer en ontstaan duplicates. Dan wordt het onduidelijk welke run gerepareerd moet worden.

Terugkerende fouten:

  • fake percent-voortgang die niet overeenkomt met echt werk
  • technische foutmeldingen voor eindgebruikers (stack traces, codes)
  • geen afhandeling voor timeouts, duplicaten of idempotentie
  • retry die een nieuwe job maakt zonder uit te leggen wat er gebeurt
  • cancel die alleen de UI verandert en niet het worker-gedrag

Een klein maar belangrijk detail: scheid het gebruikersbericht van ontwikkelaarsinformatie. Toon "12 rijen faalden validatie" aan de gebruiker en bewaar technische traces in logs.

Snelle checklist voordat je achtergrondjobs naar gebruikers brengt

Push updates when you need them
Voeg realtime status toe met web- of mobiele notificaties en polling als backup.
Try It

Voer voor release een korte controle uit op de onderdelen die gebruikers opmerken: duidelijkheid, vertrouwen en herstel.

Elke job moet een snapshot blootstellen die je overal kunt tonen: state (queued, running, succeeded, failed, canceled), voortgang (0–100 of stappen), een korte boodschap, tijdstempels (created, started, finished) en een resultaatpointer (waar output of rapport staat).

Maak UI-staten duidelijk en consistent. Gebruikers moeten één betrouwbare plek hebben om huidige en vorige jobs te vinden, plus duidelijke labels wanneer ze later terugkomen ("Completed yesterday", "Still running"). Een Recent jobs-paneel voorkomt vaak dubbele klikken en dubbel werk.

Definieer annuleren- en retryregels in eenvoudige bewoordingen. Bepaal wat Cancel betekent per jobtype, of retry is toegestaan en wat hergebruikt wordt (dezelfde inputs, nieuwe job-ID). Test vervolgens randgevallen zoals annuleren vlak voor voltooiing.

Behandel gedeeltelijke fouten als een echte uitkomst. Toon een korte samenvatting ("Imported 97, skipped 3") en bied een actiegericht rapport dat gebruikers direct kunnen gebruiken.

Plan voor herstel. Jobs moeten restarts overleven en vastgelopen jobs moeten uitmonden in een duidelijke staat met advies ("Probeer opnieuw" of "Contacteer support met job ID").

Volgende stappen: implementeer één workflow en breid uit

Kies één workflow waar gebruikers nu al over klagen: CSV-imports, rapport-exports, bulk e-mails of beeldverwerking. Begin klein en bewijs de basis: een job wordt aangemaakt, draait, rapporteert status en de gebruiker kan het later terugvinden.

Een eenvoudig job-historiescherm is vaak de grootste kwaliteitsverbetering. Het geeft mensen een plek om terug te keren in plaats van naar een spinner te staren.

Kies eerst één methode voor voortgangslevering. Polling is prima voor versie één. Maak het refresh-interval traag genoeg om aardig voor je backend te zijn, maar snel genoeg om levend aan te voelen.

Een praktische bouwvolgorde die herschrijven voorkomt:

  • implementeer jobstaten en transities eerst (queued, running, succeeded, failed, finished-with-errors)
  • voeg een job-historiepagina toe met basisfilters (laatste 24 uur, alleen mijn jobs)
  • voeg voortgangsgetallen toe alleen als je ze eerlijk kunt houden
  • voeg cancel toe pas nadat je consistente cleanup kunt garanderen
  • voeg retry toe pas nadat je zeker bent dat de job idempotent is

Als je dit bouwt zonder code, kan een no-code platform zoals AppMaster helpen door je een job-statustabel (PostgreSQL) te laten modelleren en bijwerken vanuit workflows, en die status vervolgens te renderen in web en mobiele UI. Voor teams die één plek willen om backend, UI en achtergrondlogica te bouwen is AppMaster (appmaster.io) ontworpen voor volledige applicaties, niet alleen formulieren of pagina's.

FAQ

Wat is het verschil tussen een trage request en een echte achtergrondtaak?

Een achtergrondjob start snel en geeft meteen een job-ID terug, zodat de UI bruikbaar blijft. Een trage request laat de gebruiker wachten op dezelfde webaanroep, wat leidt tot refreshes, dubbelklikken en dubbele inzendingen.

Welke jobstatussen moet ik aan gebruikers tonen?

Houd het simpel: queued, running, done en failed, plus canceled als je annuleren ondersteunt. Voeg een aparte uitkomst zoals “done with issues” toe wanneer het grootste deel wel gelukt is maar sommige items faalden, zodat gebruikers niet denken dat alles verloren is.

Hoe zorg ik dat gebruikers een taak niet kwijtraken bij het verversen van de pagina?

Geef meteen een unieke job-ID terug nadat de gebruiker de actie start, en rendereer daarna een taakrij of kaart met die ID. De UI leest de status op basis van job-ID zodat gebruikers kunnen refreshen, tabs wisselen of later terugkomen zonder het overzicht te verliezen.

Waar moet de voortgang van een job worden opgeslagen zodat die crashes en restarts overleeft?

Sla jobstatus op in een duurzaam databasetabel, niet alleen in geheugen. Bewaar de huidige staat, tijdstempels, voortgangswaarde, een korte gebruikersboodschap en een resultaat- of foutenoverzicht zodat de UI altijd dezelfde weergave kan herbouwen na restarts.

Wanneer moet ik procentvoortgang gebruiken versus stapgebaseerde voortgang?

Gebruik procent alleen als je eerlijk kunt rapporteren “X van Y” items verwerkt. Als je geen echte noemer hebt, toon dan stapgebaseerde voortgang zoals “Validating”, “Importing” en “Finalizing”, en houd de boodschap actueel zodat gebruikers beweging blijven zien.

Moet ik polling of push gebruiken om voortgang in de UI bij te werken?

Polling is het eenvoudigst en werkt goed voor de meeste apps; begin met ongeveer elke 2–5 seconden terwijl de gebruiker kijkt, en vertraag voor lange jobs of achtergrondtabs. Push-updates voelen directer, maar je hebt altijd een fallback nodig omdat verbindingen weg kunnen vallen en gebruikers tussen schermen bewegen.

Wat moet de UI doen als voortgang niet meer wordt bijgewerkt?

Toon dat updates verouderd zijn in plaats van te doen alsof de job nog actief is, bijvoorbeeld door “Last updated 2 minutes ago” te tonen en een handmatige refresh aan te bieden. Detecteer op de backend ontbrekende heartbeats en zet de job in een duidelijke staat met advies, zoals opnieuw proberen of contact opnemen met support met de job-ID.

Waar moet voortgang van langlopende taken in de UI verschijnen?

Maak de volgende actie duidelijk: of de gebruiker kan doorwerken, de pagina verlaten, of veilig annuleren. Voor taken langer dan een minuut helpt een aparte Jobs- of Activity-weergave zodat gebruikers resultaten later kunnen vinden in plaats van naar één spinner te staren.

Hoe rapporteer ik “finished with errors” zonder gebruikers angst aan te jagen?

Behandel het als een volwaardige uitkomst en toon beide kanten duidelijk, zoals “Imported 9.380 of 9.500. 120 failed.” Geef daarna een klein, actiegericht foutoverzicht dat gebruikers kunnen oplossen zonder logs te lezen, en houd technische details in interne logs in plaats van op het scherm.

Hoe implementeer ik cancel en retry zonder duplicaten of verwarring te veroorzaken?

Definieer per job wat Cancel betekent en reflecteer dat eerlijk, inclusief een tussenstaat “cancel requested” zodat gebruikers niet blijven klikken. Maak werk waar mogelijk idempotent, beperk retries en beslis of retry hetzelfde jobvoorbeeld hervat of een nieuwe job-ID aanmaakt met een schone audittrail.

Gemakkelijk te starten
Maak iets geweldigs

Experimenteer met AppMaster met gratis abonnement.
Als je er klaar voor bent, kun je het juiste abonnement kiezen.

Aan de slag
Achtergrondtaken met voortgangsupdates: UI-patronen die werken | AppMaster