如何在Dart中分配期货结果,取决于哪个期货产生了这些结果?

如何在Dart中分配期货结果,取决于哪个期货产生了这些结果?,dart,future,Dart,Future,在Dart中,我希望运行几个相互独立的代价高昂的函数,并根据生成它们的函数将结果分配给变量。这大致是一个平行的版本: double x=getX(); 双y=getY(); 我在想这样的事情: 双x,y; 未来,等等([ futureGetX(), 未来 ]).然后((列出结果){ 结果:foreach((r){ //如果(r由futureGetX产生)x=r; //如果(r由futureGetY产生)y=r; }); }); 我不知道如何实现这个由部件生成的。一种方法是将每个函数的结果包

在Dart中,我希望运行几个相互独立的代价高昂的函数,并根据生成它们的函数将结果分配给变量。这大致是一个平行的版本:

double x=getX();
双y=getY();
我在想这样的事情:

双x,y;
未来,等等([
futureGetX(),
未来
]).然后((列出结果){
结果:foreach((r){
//如果(r由futureGetX产生)x=r;
//如果(r由futureGetY产生)y=r;
}); 
});
我不知道如何实现这个由部件生成的
。一种方法是将每个函数的结果包装在不同的类中,然后在
部分检查结果的类:

如果(r是wrapperForX)x=r.getValue();
如果(r是wrapperForY)y=r.getValue();

但这对我来说似乎很不雅。有什么建议吗?

未经测试,但我想我得到了这个建议。:)

使用闭包:

Future.wait([
  () => { x = await futureGetX()},
  () => { y = await futureGetY()},
]);

多亏了Randal,我找到了一个解决方案:

Future.wait([
  () async { x = await futureGetX(); } (),
  () async { y = await futureGetY(); } ()
]);
要并行地等待未来,您可以使用
Future.wait
,正如您已经注意到的那样。
Future.wait返回的列表中的结果(异步)与原始futures的顺序相同,因此您不必使用
forEach
,只需执行以下操作:

x=结果[0];
y=结果[1];

另一种方法是使用来自异步包的FutureGroup,记录结果列表的FIFO行为:

我们如何知道哪个产生了结果?没有生成结果的那个是否返回null?还是只想得到第一个结果而忽略第二个?谢谢,这已经足够接近了。但是列表元素需要是未来元素,而不仅仅是函数。看到我下面的答案。很高兴知道,但这是一个黑客还是一个功能?功能。我可以看到它实际上并没有文档化(doh!),但我可以向您保证,它的目的就是这样。