gpt4 book ai didi

firebase - flutter - Dart : wait a forEach ends

转载 作者:IT王子 更新时间:2023-10-29 06:36:01 26 4
gpt4 key购买 nike

我尝试使用从 Firebase 数据库检索到的每个节点中的数据修改一个字符串,然后用修改后的字符串(称为“内容”)写入一个文件。

这是我尝试过的:

// Retrieve initial content from Firebase storage
var data = await FirebaseStorage.instance.ref().child("...").getData(1048576);
var content = new String.fromCharCodes(data);

// Edit content with each node from Firebase database
final response = await FirebaseDatabase.instance.reference().child('...').once();
response.value.forEach((jsonString) async {
...
// cacheManager.getFile returns a Future<File>
cacheManager.getFile(signedurl).then((file){
// Modify content
content=content.replaceAll('test',file.path);
});
});

// Finally write the file with content
print("test");
final localfile = File('index.html');
await localfile.writeAsString(content);

结果:

“测试”在 forEach 结束之前显示。

我发现我们可以在 Dart ( https://groups.google.com/a/dartlang.org/forum/#!topic/misc/GHm2cKUxUDU ) 中做:

await Future.forEach

但在我的情况下,如果我这样做:await Future.response.value.forEach(听起来有点奇怪)

然后我得到:

Getter not found: 'response'. await Future.response.value.forEach((jsonString) async {

在用新内容写入文件之前如何等待 forEach 结束(修改了“content”)?

有什么想法吗?

最佳答案

如果你使用 for(... in ) 而不是 forEach 你可以使用 async/await

Future someMethod() async {
...

for(final jsonString in response.value) {
...
// cacheManager.getFile returns a Future<File>
cacheManager.getFile(signedurl).then((file){
// Modify content
content=content.replaceAll('test',file.path);
});
});
}

使用 forEach 时,调用会立即触发每个 jsonString 并在其中 await 工作,但是 forEach 有返回类型 void 并且不能等待,只有 Future 可以。

关于firebase - flutter - Dart : wait a forEach ends,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53886373/

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