6 votes

Dart : plusieurs attentes pour un même avenir

J'ai récemment vu un exemple de code comme celui-ci

Future<Null> ensureLogin() {...}

var login = ensureLogin();

Future functionA() async {
   await login;
   print("FunctionA finished");
}

Future functionB() async {
   await login;
   print("FunctionB finished");
}

void main() {
   functionA();
   functionB()
}

Lorsque le futur est terminé, il s'imprime ci-dessous :

FunctionA finished
FunctionB finished

On dirait qu'on peut avoir plusieurs await pour le même objet futur ? Mais comment cela fonctionne-t-il sous le capot ? Et quel est l'équivalent de Future ? Peut-être quelque chose comme ci-dessous ?

login.then(functionA).then(fucntionB)

11voto

Günter Zöchbauer Points 21340

Vous pouvez enregistrer autant de callbacks que vous le souhaitez avec la fonction then(...) pour un seul Future instance.

Sans async / await cela ressemblerait à

Future functionA() async {
   login.then((r) {
     print("FunctionA finished");
   });
}

Future functionB() async {
   login.then((r) {
     print("FunctionB finished");
   });
}

Lorsque login est terminée, tous les callbacks enregistrés seront appelés les uns après les autres.

Si login était déjà terminé lorsque login.then((r) { ... }) est appelé, alors le rappel est appelé après la fin de l'exécution du code de synchronisation en cours.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X