我尝试在两个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
不能像预期的那样工作?
1条答案
按热度按时间owfi6suc1#
list1.addAll(list2)
mutateslist1
。它不返回新的List
,也不返回原始的List
。它什么也不返回,这就是为什么分析器给你一个错误,appended
的类型是void
。不要忽略警告和错误。如果你得到意外的结果,仔细检查文档以验证您的期望。List.addAll
documentation显示它具有void
返回类型,并显示示例用法。请注意,当您稍后执行
Future.wait([...list1, ...list2])
时,您将包含来自list2
的Future
两次(尽管除了效率稍低之外,它不应该影响行为)。如果你想要一个新的
List
,你可以使用List.operator +
: