相关疑难解决方法(0)

Dart中的Future/async/await

我有一个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在类构造函数中使用该方法?

asynchronous async-await dart flutter

18
推荐指数
3
解决办法
1万
查看次数

标签 统计

async-await ×1

asynchronous ×1

dart ×1

flutter ×1