Sorting dart-对未来列表进行排序

Sorting dart-对未来列表进行排序,sorting,dart,future,Sorting,Dart,Future,所以我有一组选项,每个选项都包含一个int值,表示它们的序号 这些选项存储在远程数据库中,每个选项都是一条记录。 因此,当我从数据库中获取它们时,我会得到一个未来的列表: e、 g.列表 我需要能够对这些选项进行排序 下面的省道板显示了我试图实现的目标的简化视图: 期权必须是期货。 我最初的解决方案是将选项复制到一个列表中,“完成”它们,然后对列表进行排序。 然而,这导致了其他问题,因此我需要对原始列表进行“现场”排序。在期货完成之前,您不能对期货进行排序,即使这样,您也需要先提取值。 如果你

所以我有一组选项,每个选项都包含一个int值,表示它们的序号

这些选项存储在远程数据库中,每个选项都是一条记录。 因此,当我从数据库中获取它们时,我会得到一个未来的列表: e、 g.
列表

我需要能够对这些选项进行排序

下面的省道板显示了我试图实现的目标的简化视图:

期权必须是期货。 我最初的解决方案是将选项复制到一个列表中,“完成”它们,然后对列表进行排序。
然而,这导致了其他问题,因此我需要对原始列表进行“现场”排序。

在期货完成之前,您不能对期货进行排序,即使这样,您也需要先提取值。 如果你以后需要一份期货清单,我会这样做:

List<Future<T>> sortFutures<T>(List<Future<T>> input, [int compare(T a, T b)]) {
  var completers = [for (var i = 0; i < input.length; i++) Completer<T>()];
  Future.wait(input).then((values) {
    values.sort(compare);
    for (int i = 0; i < values.length; i++) {
      completers[i].complete(values[i]);
    }
  });
  return [for (var c in completers) c.future];
}
List排序未来(列表输入,[int比较(ta,tb)]){
var completers=[for(var i=0;i
这不会返回原始期货,因为在您必须返回它们时,您不知道订单。它确实会返回具有相同价值的期货

如果任何一个期货交易以一个错误完成,那么这个交易就失败了。如果可能的话,您将需要更多的错误处理。

Gentlfolk, 谢谢你的帮助

julemand101使用Future.wait()的建议引导我找到答案

这也帮助我更好地理解这个问题

我做了一个新的要点,更准确地展示了我试图做的事情

基本上,当我们通过网络执行db请求时,我们会得到一个实体。 问题是该实体通常会引用其他实体。 这可以在需要返回的整个实体树中结束。 通常,您不需要这些实体中的任何一个

因此,我们采用的解决方案是只返回每个子实体(仅直接子实体)的数据库“id”

然后我们将这些id存储在类RefId中(见下文)

RefId本质上是一个
future
,它具有实体id,并且知道如何从数据库中获取实体

当我们实际需要访问一个子实体时,我们强制完成RefId(即跨网络边界检索实体)。 我们有一个完整的缓存方案来保持这一性能,并且能够强制获取子元素,作为父请求的一部分,我们预先知道需要它们

我的示例中的选项本质上是需要排序的菜单项。 当然,在它们被取回之前,我无法对它们进行分类。 因此,重新编写一个示例和答案:

以下是我们使用的实际IdRef类:

它现在有一个静态的
resolveList
方法来帮助解决这类问题


谢谢您的帮助。

您是否考虑过使用<代码> Engest.Walue< /Cord>将期货列表解析为可以稍后排序的值列表?