gpt4 book ai didi

list - 在 forEach 循环中填充列表之前,我的异步调用正在返回

转载 作者:IT老高 更新时间:2023-10-28 12:42:32 25 4
gpt4 key购买 nike

我有一个例程从设备获取文件名列表,然后读取文件以构建列表。但是,调用例程总是返回零项。我打印文件名,所以我知道它们存在,但是,在我读取文件之前,异步似乎正在返回。我在进行 HTTP 调用时使用了类似的代码。但是,这里的某些事情导致例程返回列表,即使它还没有完成。也许,我可能在错误的时间调用它?我在这里调用retrieveItems:

@override
void initState() {
super.initState();
retrieveItems();
}

最终我会有一个刷新按钮,但现在我只想用文件中的数据填充列表...

--------

被调用者

Future<List<String>> readHeaderData() async {
List<String> l = new List();
List<String> files = await readHeaders(); // Gets filenames
files.forEach((filename) async {
final file = await File(filename);
String contents = await file.readAsString();
User usr = User.fromJson(json.decode(contents));
String name = usr.NameLast + ", " + usr.NameFirst;
print(name);
l.add(name);
}
return l;

来电者

void retrieveItems() async {
LocalStorage storage = new LocalStorage();
await storage.readHeaderData().then((item) {
try {
if ((item != null ) &&(item.length >= 1)) {
setState(() {
users.clear();
_users.addAll(item);
});
} else {
setState(() {
_users.clear();
final snackbar = new SnackBar(
content: new Text('No users found.'),
);
scaffoldKey.currentState.showSnackBar(snackbar);
});
}
} on FileNotFoundException catch (e) {
print(e.toString()); //For debug only
setState(() {
_users.clear();
});
});
}
});

最佳答案

这段代码

Future<List<String>> readHeaderData() async {
List<String> l = new List();
List<String> files = await readHeaders(); // Gets filenames
files.forEach((filename) async {
final file = await File(filename);
String contents = await file.readAsString();
User user = User.fromJson(json.decode(contents));
String name = user.NameLast + ", " + user.NameFirst;
print(name);
l.add(name);
}
return l;
}

返回列表 l 然后处理 asyc forEach(...) 回调

如果你改成

Future<List<String>> readHeaderData() async {
List<String> l = new List();
List<String> files = await readHeaders(); // Gets filenames
for(var filename in files) { /// <<<<==== changed line
final file = await File(filename);
String contents = await file.readAsString();
User user = User.fromJson(json.decode(contents));
String name = user.NameLast + ", " + user.NameFirst;
print(name);
l.add(name);
}
return l;
}

在处理完所有文件名之前,该函数不会返回。

files.forEach((filename) async {

表示你可以在回调中使用await,但是forEach并不关心(filename) async {...}是什么> 返回。

关于list - 在 forEach 循环中填充列表之前,我的异步调用正在返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51106934/

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