我有一个loadData从文件加载一些文本的函数:
Future<String> loadAsset() async {
return await rootBundle.loadString('assets/data/entities.json');
}
Run Code Online (Sandbox Code Playgroud)
该loadString方法来自Flutter SDK,并且是异步的.
在loadAsset随后的方法被调用的另一种方法,必须我标记为async,因为loadAsset是异步,我需要使用await:
Future<List<Entity>> loadEntities() async {
String jsonData = await loadAsset();
return parseData(jsonData);
}
Run Code Online (Sandbox Code Playgroud)
该parseData方法不是异步的,它接收String,解析它,并返回一个对象列表:
List<Entity> parseData(String jsonString) {
...
}
Run Code Online (Sandbox Code Playgroud)
但由于loadEntities必须标记async,这需要它返回一个Future,但实际上,它不是一个Future因为我使用await,它等待loadAsset方法完成,然后parseData使用结果调用函数.
这很容易变成一个async叫雪球,因为每个使用的方法也loadEntities必须标记为async.
另外,我不能loadEntities在类构造函数中使用,因为构造函数应该标记为async,这在Dart中是不允许的.
我async/await在Dart中使用的模式错了吗?我怎么能loadEntities在类构造函数中使用该方法?