DEV Community

GoyesDev
GoyesDev

Posted on

SC #4: Sintaxis async/await

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
}
Enter fullscreen mode Exit fullscreen mode

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 
}
Enter fullscreen mode Exit fullscreen mode

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()
}
Enter fullscreen mode Exit fullscreen mode

Si no se usa Task, se tiene el error:

'async' call in a function that does not support concurrency

Palabras clave

  1. async: Indica que la función ejecuta trabajo asíncrono
  2. await: Pausa la ejecución hasta que la función asíncrona termina
  3. throws: Propaga errores.

Top comments (0)