Flutter:Future.wait 似乎不起作用

问题描述 投票:0回答:1

我在我的首页上构建了一个小部件,它依赖于我从 firebase 收到的信息。

因为如果没有数据库中的信息(日期、图片网址等),这个小部件就无法正确显示,所以在渲染这个小部件之前,必须完成两个 future(从数据库中获取数据)。

现在,我从首页的 setState 方法调用一个函数,该函数调用异步函数

getAllFutures()
,我在其中执行以下代码:

await Future.wait([
  globals.checkExistingWochenplan(),
  globals.getWochenplan(kw: 34)
]).then((value) {
  print(value);
  print("DONE");
});

根据我对

Future.wait
的理解(如果我错了请纠正我),这个方法在执行时会阻塞主线程,直到所有futures完成,这正是我想要的,因为我依赖数据。是对的吗?因为,当我查看调试控制台消息时,我的应用程序的其余部分会继续执行,而 Future.wait 中的 future 会被执行。

有人可以告诉我我在这里做错了什么/我正确使用

Future.wait
的天气吗?

.then
方法中的 print 语句随后返回
null
两次,但这可能是因为期货本身的原因。

我期待您的回复。

问候 悟空

flutter firebase future
1个回答
-1
投票

Future.wait()
用于等待多个 future 完成并收集它们的结果。返回一个 future,一旦所有提供的 future 完成,该 future 就会完成,无论是其结果,还是在任何提供的 future 失败时都会出现错误。但你不应该混合使用
then
await
,最好使用其中一个/或来保持一致性。例如:

 void main()  {
 Future.wait([delayedNumber(), delayedString()])
 .then((value) {
  print(value);
  print("DONE");
});
   print("printed first outside of future");
}


Future<int> delayedNumber() async {
  await Future.delayed(const Duration(seconds: 2));
  return 2;
}

Future<String> delayedString() async {
  await Future.delayed(const Duration(seconds: 2));
  return "result";
}

这会给你:

printed first outside of future
[2, result]
DONE

如果您使用

async/await

 void main() async {
 var value = await Future.wait([delayedNumber(), delayedString()]);
 print(value);
 print("printed at the end");
}


Future<int> delayedNumber() async {
  await Future.delayed(const Duration(seconds: 2));
  return 2;
}

Future<String> delayedString() async {
  await Future.delayed(const Duration(seconds: 2));
  return "result";
}

您将得到以下内容:

[2, result]
printed at the end

您可以在这里阅读更多相关信息:

异步编程:futures、async、await

等待静态方法

© www.soinside.com 2019 - 2024. All rights reserved.