Дротик: несколько ждут того же будущего

Я недавно видел пример кода, как показано ниже

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)

2 ответа

Решение

Вы можете зарегистрировать столько обратных вызовов, сколько хотите 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) { ... }) вызывается, затем вызывается обратный вызов после завершения выполнения текущего кода синхронизации.

Я думаю, вы можете просто использовать:

      Future.wait(
  [
    method1(),
    method2(),
  ]
).then((){});
Другие вопросы по тегам