【发布时间】:2019-05-22 00:28:30
【问题描述】:
我尝试使用从 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);
结果:
“test”在 forEach 结束之前显示。
我发现我们可以在 Dart (https://groups.google.com/a/dartlang.org/forum/#!topic/misc/GHm2cKUxUDU) 中做:
等待 Future.forEach
但在我的情况下,如果我这样做:等待 Future.response.value.forEach(听起来有点奇怪)
然后我得到:
找不到吸气剂:“响应”。 等待 Future.response.value.forEach((jsonString) async {
在用新内容写入文件之前如何等待 forEach 结束(修改了“内容”)?
有什么想法吗?
【问题讨论】:
-
我不知道 Dart,但我认为您应该使用一些
map值而不是forEach值,以便返回Promises数组(或 Dart 语言中的类似值) ,Futures也许?)能够为所有人“等待”。在这里,您只是创建了一些异步行为,但它们并没有阻塞,因此要执行print("test")代码。
标签: firebase firebase-realtime-database dart flutter