Saltar al contenido

Dart: cómo devolver el futuro

Solución:

No es necesario devolver nada manualmente, ya que un async La función solo regresará cuando la función esté realmente hecha.

Al mirar sus ejemplos, se está perdiendo el async palabra clave, lo que significa que debe escribir lo siguiente en su lugar:

Future<void> deleteAll(List stuff) async {
    stuff.forEach( s => delete(s));
}

Future<void> delete(Stuff s) async {
   ....
   await file.writeAsString(jsonEncode(...));
}

No es necesario devolver nada, ya que void no es nada, como su nombre lo indica.

También asegúrate de llamar deleteAll y writeAsString() utilizando await.

No puedes hacer eso con forEach.

Pero puedes usar Future.wait y .map como esto

Future<void> deleteAll(List stuff) {
  return Future.wait(stuff.map((s) => delete(s)));
}

Future<void> delete(Stuff s) async{
  ....
  await file.writeAsString(jsonEncode(...));
}

Cuándo usar async palabra clave:

Puedes usar async cuando tu función usa await palabra clave dentro.

Entonces, cuando usar await palabra clave:

  1. cuando desea obtener el resultado de una función asincrónica y desea hacer algo de lógica en el resultado
Future<int> fetchCountAndValidate() asycn{
  final result = await fetchCountFromServer();
  if(result == null)
    return 0;
  else
   return result;
}
  1. Cuando desee llamar a varias funciones asincrónicas
Future<int> fetchTotalCount() asycn{
  final result1 = await fetchCount1FromServer();
  final result2 = await fetchCount2FromServer();
  return result1 + result2;
}

Cuando no necesitas async o await:

  1. Cuando acaba de llamar a otra función asincrónica
Future<int> getCount(){
  //some synchronous logic
  final requestBody = {
    "countFor": "..."
  };
  return fetchCountFromServer(requestBody); //this is an asynchronous function which returns `Future<int>`
}
  1. En algunos casos raros, no nos importa la finalización de la función asincrónica
void sendLogoutSignal(){
  http.post(url, {"username" : "id0001"});
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *