我使用Flutter从服务器上下载了3组不同的数据,然后对这3组数据进行处理。我可以这样做:
List<Foo> foos = await downloader.getFoos();
List<Bar> bars = await downloader.getBars();
List<FooBars> foobars = await downloader.getFooBars();
processData(foos, bars, foobars);
但我更喜欢异步并行下载所有3个数据集。我已经看到Dart有这样的Future.wait method:
Future<List<T>> wait <T>(
Iterable<Future<T>> futures, {
bool eagerError: false,
void cleanUp(
T successValue
)
})
然而,它看起来只会返回相同类型(T)的值。我有3个不同的类型,所以我不知道如何使用它,并得到我的3个数据集回来。
实现这一目标的最佳替代方法是什么?
谢谢你!
5条答案
按热度按时间thigvfpy1#
您需要将每个
Future<T>
修改为Future
的公共类型。您可以使用Future<void>
并分配结果,而不是依赖于返回值:或者,如果您更喜欢
await
而不是.then()
,则Future.wait
调用可以是:i7uaboj42#
我认为正确的答案是使用官方的async包和
FutureGroup
:v64noz0r3#
我认为这是不可能做到的,你能做的就是这样:
mepcadol4#
我做了一个helper函数,它利用了其他答案中的一些逻辑。它使用
tuple
包,但是你可以很容易地自己编写它(包括在下面)。便叫它:
现在如果你想要一个3个参数,4个,或者更多,你可以复制并粘贴(
await3
,await4
)。这不是一个太疯狂的模式,我已经用它为multiple lets in Kotlin和元组库我链接。oxcyiej75#
类型T是泛型类型
你知道你的类型,所以你可以和他们一起工作。
如果您使用的是
FutureBuilder
,则可以使用此方法访问不同的结果。(与您在Future.wait
方法中放置它们的顺序相同)