Dart 不会附加 Future 的列表

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

我正在尝试在两个 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
没有按预期工作?

dart asynchronous async-await
1个回答
0
投票

list1.addAll(list2)
变异
list1
。它不会返回新的
List
,也不会返回原始的
List
。它什么都不返回,这就是为什么分析器给你一个错误,说
appended
的类型是
void
。不要忽略警告和错误。

请注意,当您稍后执行

Future.wait([...list1, ...list2])
时,您因此包括了
Future
中的
list2
s 两次(尽管除了效率稍低之外,它不应该影响行为)。

如果你想要一个新的

List
,你可以使用
List.operator +

var appended = list1 + list2;
© www.soinside.com 2019 - 2024. All rights reserved.