我正在尝试在两个 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
没有按预期工作?
list1.addAll(list2)
变异list1
。它不会返回新的List
,也不会返回原始的List
。它什么都不返回,这就是为什么分析器给你一个错误,说 appended
的类型是 void
。不要忽略警告和错误。
请注意,当您稍后执行
Future.wait([...list1, ...list2])
时,您因此包括了 Future
中的 list2
s 两次(尽管除了效率稍低之外,它不应该影响行为)。
如果你想要一个新的
List
,你可以使用List.operator +
:
var appended = list1 + list2;