如何通过避免将未来链作为回报类型来了解某个未来是否完整?

时间:2016-07-05 23:37:06

标签: dart

方案

如果我想从文件中读取并将数据存储在Map中,并且多次使用该地图进行验证。

我是否可以在不必将使用上述地图的所有方法的返回类型更改为Future的情况下执行此操作?

示例:

Map metadata = null
Future readFromFile async {
 .... metadata = await File.readingfromFile(...);
}

Future getRegion(..) async {
  if(metadata == null) { await readFromFile() }
  return metadata["region"]
}

如果使用并需要getRegion(..)来完成的方法(如isValidRegion等),则使用上面的代码,然后将isValidRegion的返回类型转换为Future。

Future<bool> isValidRegion(..) async {
   return ((await getRegionData(...)) != null )
}

如果isValidRegion出现在另一个方法中,那么它们的返回类型也必须更改为Future。

Future<String> parse(...) async {
   ....
   if(await isValidRegion()) {
    ...
    }
...
}

什么是避免这种期货链作为回报类型的优雅方式?

1 个答案:

答案 0 :(得分:3)

异步执行具有传染性,您无法从异步执行到同步执行。

您可以做的是从同步文件中读取以避免问题(如果可以,如果您从网络连接中读取它,则可能无法实现)。