Dart不追加Future的列表

zc0qhyus  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(101)

我尝试在两个Future列表上调用Future.await:

Future<void> first() async {
  await Future.delayed(Duration(seconds: 1));
  print('first');
}

Future<void> second() async {
  print('second');
}

void main() async {
  final list1 = [0, 1].map((e) => first()).toList();
  final list2 = [2, 3].map((e) => second()).toList();
  final appended = list1.addAll(list2); // result is not defined
  // await Future.wait(appended); // <= error: This expression has a type of 'void' so its value can't be used.
  await Future.wait([...list1, ...list2]); // <= this works
}

为什么addAll不能像预期的那样工作?

owfi6suc

owfi6suc1#

list1.addAll(list2)mutateslist1。它不返回新的List,也不返回原始的List。它什么也不返回,这就是为什么分析器给你一个错误,appended的类型是void。不要忽略警告和错误。如果你得到意外的结果,仔细检查文档以验证您的期望。List.addAll documentation显示它具有void返回类型,并显示示例用法。
请注意,当您稍后执行Future.wait([...list1, ...list2])时,您将包含来自list2Future两次(尽管除了效率稍低之外,它不应该影响行为)。
如果你想要一个新的List,你可以使用List.operator +

var appended = list1 + list2;

相关问题