/* Page prose (de) */
"ErrorsAsyncThrowsAndTryAwait" = "# Fehler: `async throws` und `try await`\n\nErinnerst du dich, wie schmerzhaft Fehler im Callback-Code waren (im Kapitel [Warum moderne Nebenläufigkeit](Why%20Modern%20Concurrency.playgroundchapter/Overview))? Du konntest nicht `throw`en (die Funktion war bereits zurückgekehrt), also fädeltest du ein `Result` oder einen zusätzlichen `Error?`-Parameter durch jede Closure und hofftest, dass kein Codepfad vergaß, den Completion Handler aufzurufen.\n\nAsync-Funktionen werfen auf die *normale* Weise. Markiere die Funktion als `async throws`, rufe sie mit `try await` auf und umhülle sie mit einem gewöhnlichen `do-try-catch`:";
"ErrorsAsyncThrowsAndTryAwait-2" = "Lies das von oben nach unten: mahlen, ausgeben, mahlen, ausgeben (mit einem einzigen `do-try-catch` um das Ganze). Keine verschachtelten Closures, kein `Result`, keine vergessenen Callbacks. Ein Fehler, der tief in einem asynchronen Aufruf geworfen wird, wickelt sich bis zu deinem `catch` ab, genau wie ein synchroner Throw.\n\n**Sieh es laufen:** du siehst `Ground 18 g of beans`, dann etwa eine halbe Sekunde später `⚠️ Refill the hopper and try again`. Das zweite `print` läuft nie, weil `try await grind(grams: 0)` warf und direkt zum passenden `catch` sprang.\n\n> **Reihenfolge von `try await`:** schreibe erst `try`, dann `await` (`try await grind(...)`). Denk \"try to await this.\"\n\n[Zurück](@previous)  |  Seite 6 von 8  |  [Weiter: Arbeit nebenläufig mit Async Let ausführen](@next)";
