Дротик: несколько ждут того же будущего - PullRequest
0 голосов
/ 25 сентября 2018

Я недавно видел пример кода, подобный приведенному ниже

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()
}

Когда будущее завершено, оно печатается ниже:

FunctionA finished
FunctionB finished

Похоже, мы можем иметь несколько ожидающих одного и того жебудущий объект?Но как это работает под капотом?И что это эквивалентно будущему?Может быть, что-то вроде ниже?

login.then(functionA).then(fucntionB)

1 Ответ

0 голосов
/ 25 сентября 2018

Вы можете зарегистрировать столько обратных вызовов, сколько хотите, с помощью then(...) для одного Future экземпляра.

Без async / await это будет выглядеть как

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

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

Когда login завершится, все зарегистрированные обратные вызовы будут вызываться один за другим.

Если login уже был завершен при вызове login.then((r) { ... }), обратный вызов вызывается после завершения выполнения текущего кода синхронизации.

...