Una función asíncrona debe marcarse con la palabra clave async. En caso de poder emitir un error, se pone la palabra clave throws después de async. Si la función no arroja un error, se puede omitir throws.
func fetchData() async throws -> Data {
// Algo
// ❌ - Error de compilación: Se TIENE que retornar algo, o arrojar un error
}
Al usar la sintaxis async throws sí o sí se debe devolver algo o arrojar un error. Por otro lado,al usar closures, es fácil olvidar invocarlos -sea para notificar un error o retornar un valor.
func fetchData(_ completion: @escaping (Data?, Error?) -> Void) {
// No se invoca el bloque completion(_:), lo cual sería un error
}
Invocar una función asíncrona
Task crea un contexto asíncrono dentro de uno síncrono, lo que permite llamar a un método async desde un contexto síncrono.
Task {
try await fetchData()
}
Si no se usa Task, se tiene el error:
'async' call in a function that does not support concurrency
Palabras clave
-
async: Indica que la función ejecuta trabajo asíncrono -
await: Pausa la ejecución hasta que la función asíncrona termina -
throws: Propaga errores.
Top comments (0)