【问题标题】:Flutter: doing sthg asynchronous while reading Firebase dataFlutter:在读取 Firebase 数据时进行异步操作
【发布时间】:2019-05-18 04:57:45
【问题描述】:

我尝试在从 Firebase 读取数据时进行异步操作,但它不起作用,

这是我尝试过的:

Future<String> test() async {

  var cacheManager = await CacheManager.getInstance(); //await here is OKAY 

  DatabaseReference firebaseRef = FirebaseDatabase.instance.reference();
  firebaseRef.child('...').once().then((DataSnapshot snapshot) {
    Map<dynamic,dynamic> map = snapshot.value;
    map.forEach((key, url) {
       print('$key: $url');   //OKAY
       await precacheImage(new NetworkImage(url), context); //doesn't cache images
    });
  });
  return "";
 }

我明白了:

错误:意外的令牌“等待”。

我也试过了:

Future<Map> test() async {  //<---- added type Map
    ...
    map.forEach((key, url) async { //<--- added async
       //var file = await cacheManager.getFile(url);
       await precacheImage(new NetworkImage(url), context); //same, cache doesn't work
    });

但我明白了:

E/颤振(3971):#1
__InternalLinkedHashMap&_HashVMBase&MapMixin&_LinkedHashMapMixin.forEach (dart:collection/runtime/libcompact_hash.dart:370:8)

有什么想法吗?

【问题讨论】:

  • 正如我的answer to your previous question 中所说,您需要将包含此代码的方法标记为async。每次使用 await 时都需要这样做。
  • 当我用“async”标记方法然后我得到“异步暂停”,很抱歉,但我开始了,这个问题对我来说真的不明显
  • 嗯?我以前从未有过。希望其他人知道如何解决这个问题。
  • 我用另一种方法替换了 forEach 中的方法来尝试预缓存图像,但是图像的预加载不起作用:( url 无论如何都是正确的,奇怪...

标签: javascript firebase flutter


【解决方案1】:

您将一个函数传递给then(...),并在该函数中使用await,为此,该函数需要标记为async
将其他一些外部函数标记为async 是不够的。

firebaseRef.child('...').once().then((DataSnapshot snapshot) async { // async here was missing
    Map<dynamic,dynamic> map = snapshot.value;
    map.forEach((key, url) {
    print('$key: $url');   //OKAY
    var file = await cacheManager.getFile(url); // doesn't work
  });

它可能仍然无法正常工作,但这取决于您想用file 做什么,而您的问题并不清楚。

【讨论】:

  • 谢谢,但还是不行,只有在map.forEach之外的“await”才有效,那怎么办?
  • 没有看到它,因为 gormatting 很差。 mapthen 相同。 Xou 正在传递一个函数。
  • 对不起,我没有看到格式,我编辑了代码以更好地可视化,那么如何处理地图,有什么想法吗?
  • map.forEach((key, url) asyn {
  • 好的,我尝试的是正确的,但我收到了另一个错误消息,我用这个新问题编辑了问题,有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 2019-11-07
  • 2020-07-01
  • 2017-08-19
相关资源
最近更新 更多