/* Page prose (es) */
"Overview" = "# Continuaciones\n\nA estas alturas `await` se siente natural, pero la mayoría del código que anda por ahí no lo habla. Los completion handlers clásicos de capítulos anteriores, cada salto de `DispatchQueue`, cada método delegado que se dispara \"más tarde\" (y un sinfín de APIs del sistema y de SDK que encontrarás en proyectos reales) son APIs de **callback**, no asíncronas. No puedes espolvorear `await` sobre `fetchThing { ... }` y confiar en que salga bien. Una **continuación** es el adaptador oficial: te deja envolver una de esas viejas APIs de callback para que el mundo exterior pueda llamarla con un `await` limpio. Este capítulo trata de cómo construir ese adaptador a mano.\n\n---\n\n## Qué aprenderás\n\n* Qué es una **continuación**, y por qué es el puente de los callbacks a `await`.\n* `withCheckedContinuation`: suspender una función asíncrona, ejecutar una API de callback, y **reanudar** cuando el callback se dispara.\n* `withCheckedThrowingContinuation` para APIs que pueden fallar, envolviendo tanto la forma `Result` como la clásica `(valor, error)`.\n* La única regla que nunca debes romper: **reanudar exactamente una vez**, y cómo las continuaciones \"checked\" te atrapan cuando resbalas.\n* Cómo puentear un callback de un solo disparo, al estilo **delegado**, hacia una sola llamada asíncrona.\n\n---\n\n## El puente que necesitas\n\nAquí está el desajuste. Una función asíncrona avanza de arriba abajo y **se suspende** en cada `await`, devolviendo el hilo hasta que su resultado esté listo. Una API de callback no devuelve un resultado en absoluto: te entrega una clausura y la llama **más tarde**, desde donde sea que terminó. Dos mundos distintos.\n\nUna **continuación** es un valor que representa \"el resto de la función asíncrona suspendida, esperando a que se le entregue un resultado.\" Obtienes una, la guardas, llamas a tu vieja API de callback, y cuando el callback se dispara **reanudas** la continuación con el valor. Esa reanudación es lo que despierta de nuevo a la función asíncrona.\n\nLa forma es siempre la misma:\n\n```swift\nfunc modernVersion() async -> Result {\n    await withCheckedContinuation { continuation in\n        oldCallbackAPI { value in                   // the callback fires later...\n            continuation.resume(returning: value)   // ...and wakes us up\n        }\n    }\n}\n```\n\nLa llamada `await withCheckedContinuation { ... }` **se suspende** justo ahí. No retornará hasta que *alguien* llame a `continuation.resume(...)`. La clausura que pasas se ejecuta de inmediato (ahí es donde lanzas la vieja API), pero el `await` en sí queda aparcado hasta que la reanudación aterriza.\n\nEn la página siguiente construiremos una de verdad y la veremos suspenderse y reanudarse.\n\npágina 1 de 8  |  [Siguiente: Suspender, luego reanudar](@next)";
