Flutter   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了异步 – Dart中的Future / async / await大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个函数loadData,它从文件中加载一些文本:

Future<String> loadAsset() async {
  return await rootBundle.loadString('assets/data/entities.json');
}

loadString方法来自Flutter SDK,并且是异步的.

然后在另一个方法调用loadAsset方法,必须将其标记为async,因为loadAsset是异步的,我需要使用await:

Future<List<Entity>> loadEntities() async {
  String jsonData = await loadAsset();
  return parseData(jsonData);
}

parseData方法不是异步的,它接收一个String,解析它,并返一个对象列表:

List<Entity> parseData(String jsonString) {
  ...
}

但由于loadEntities必须用async标记,这需要它返回Future,但实际上,它不是Future,因为因为我使用await,它等待loadAsset方法完成,然后使用结果调用parseData函数.

这很容易变成异步调用的雪球,因为每个使用loadEntities的方法也必标记为异步.

另外,我不能在类构造函数中使用loadEntities,因为构造函数应该标记为async,这在Dart中是不允许的.

我在Dart中使用async / await模式错了吗?我怎么能在类构造函数中使用loadEntities方法

解决方法

不,异步具有传染性,无法从异步返回到同步执行.

async / await只是methodThatReturnsFuture()的语法糖.然后(…)

使用异步标记方法只是为了允许您在其正文中使用await.如果没有异步,您仍然需要返回一个Future来调用代码,以便在loadAsset()变为可用之后执行.

大佬总结

以上是大佬教程为你收集整理的异步 – Dart中的Future / async / await全部内容,希望文章能够帮你解决异步 – Dart中的Future / async / await所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。