gpt4 book ai didi

Flutter 异步加载多个函数

转载 作者:行者123 更新时间:2023-12-02 18:49:47 24 4
gpt4 key购买 nike

如何让 Flutter 知道等待一个函数(以及 future 的函数)完成,直到调用下一个函数?看起来 load() 函数本身在 loadFeed() Future 完成之前完成,我该如何解决这个问题?

这是我当前的代码:

ValueNotifier<List> data = ValueNotifier([]);
ValueNotifier<bool> loading = ValueNotifier(true);

loadAll() async {
await load(0, 'url1');
print("0 finished");
await load(1, 'url2');
print("1 finished");
await load(2, 'url3');
print("2 finished");
}

load(int categoryIndex, String _url) async {
loadFeed(_url).then((result) {
if (null == result || result.toString().isEmpty) {
print("error");
return;
}
data.value = [[],[],[],];
for (var i = 0; i < result.items.length; i++) {
data.value[categoryIndex].add(result.items[i]);
}
data.notifyListeners();
});
}

Future<RssFeed> loadFeed(String _url) async {
loading.value = true;
try {
final client = http.Client();
final response = await client.get(Uri.parse(_url));

return RssFeed.parse(response.body);
} catch (e) {
print("error");
} finally {
loading.value = false;
}
return null;
}

最佳答案

It seems like the load() function itself completes before the loadFeed() Future is finished, how can I fix that?

这正是问题所在。你这样做:


load(int categoryIndex, String _url) async {
loadFeed(_url).then((result) {
// ... bunch of code...
});
}

您的 load 函数调用 loadFeed,注册一个 Future.then 回调,忽略新返回的 Future,回调注册后同步返回给调用者。它不会使用 await 来等待 Future 完成,也不会将 Future 返回给调用者以让调用者等待 future

如果您使用 async/await 而不是将其与原始 Future API 混合使用,则会简单得多:

Future<void> load(int categoryIndex, String _url) async {
var result = await loadFeed(_url);
// ... bunch of code...
}

此外,启用 unawaited_futures lint在你的analysis_options.yaml file在静态分析过程中会发现这个问题。

关于Flutter 异步加载多个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66941576/

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