方案
如果我想从文件中读取并将数据存储在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()) {
...
}
...
}
什么是避免这种期货链作为回报类型的优雅方式?
答案 0 :(得分:3)
异步执行具有传染性,您无法从异步执行到同步执行。
您可以做的是从同步文件中读取以避免问题(如果可以,如果您从网络连接中读取它,则可能无法实现)。