/* Page prose (es) */
"ErrorsAsyncThrowsAndTryAwait" = "# Errores: `async throws` y `try await`\n\n¿Recuerdas lo dolorosos que eran los errores en el código con callbacks (en el capítulo [Por qué la concurrencia moderna](Why%20Modern%20Concurrency.playgroundchapter/Overview))? No podías hacer `throw` (la función ya había retornado) así que hilabas un `Result` o un parámetro extra `Error?` a través de cada clausura, y esperabas que ningún camino de código olvidara llamar al completion handler.\n\nLas funciones asíncronas lanzan de la forma *normal*. Marca la función como `async throws`, llámala con `try await`, y envuélvela en un `do-try-catch` común:";
"ErrorsAsyncThrowsAndTryAwait-2" = "Lee eso de arriba abajo: moler, imprimir, moler, imprimir (con un solo `do-try-catch` alrededor de todo). Sin clausuras anidadas, sin `Result`, sin callbacks olvidados. Un error lanzado en lo profundo de una llamada asíncrona se desenreda hasta tu `catch` igual que un throw síncrono.\n\n**Míralo en acción:** verás `Ground 18 g of beans`, luego alrededor de medio segundo después `⚠️ Refill the hopper and try again`. El segundo `print` nunca se ejecuta, porque `try await grind(grams: 0)` lanzó y saltó directo al `catch` correspondiente.\n\n> **Orden de `try await`:** escribe `try` primero, luego `await` (`try await grind(...)`). Piensa \"intenta esperar esto (try to await this).\"\n\n[Anterior](@previous)  |  página 6 de 8  |  [Siguiente: Ejecutar trabajo concurrentemente con async let](@next)";
