gpt4 book ai didi

asynchronous - 异步对调用者滚雪球,不能使构造函数异步

转载 作者:IT老高 更新时间:2023-10-28 12:29:38 31 4
gpt4 key购买 nike

我有一个函数 loadData 从文件中加载一些文本:

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

loadString 方法来自 Flutter SDK,是异步的。

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

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 函数.

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

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

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

最佳答案

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

async/await 只是 methodThatReturnsFuture().then(...)

的语法糖

async 标记方法只是为了允许您在其主体中使用 await。如果没有 async,您仍然需要返回一个 Future 来调用代码,以便仅在 loadAsset() 的结果可用后执行。

关于asynchronous - 异步对调用者滚雪球,不能使构造函数异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49537996/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com