Дротик: несколько ждут того же будущего
Я недавно видел пример кода, как показано ниже
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((){});