Dart:使用 Futures 异步填充静态变量

标签 dart dart-async

我已经为元素的所有实例定义了一个静态变量作为 Map 。如果它包含特定键,则应使用该值。如果键不包含实例应该通过请求获取数据并将其保存在静态映射中,以便其他实例可以使用它。

static var data = new Map();

func() {
  if (Elem.data.containsKey(['key']) {
    list = Elem.data['key'];
  }
  else {
    Helper.getData().then((requestedData) {
      list = requestedData;
      Elem.data.addAll({ 'key' : requestedData });
  }
}

问题是我的所有实例都进入 else,因为当其他实例处于 if 时,键不包含在 Map 中。所以我需要他们等待,直到数据在 map 中。

最佳答案

static var data = new Map();
static Completer _dataCompleter;

Future<bool> func() {
  if(_dataCompleter == null) {
    _dataCompleter = new Completer();
    Helper.getData().then((requestedData) {
      list = requestedData;
      Elem.data.addAll({ 'key' : requestedData });
      _dataCompleter.complete(true);
    })
  } 
  if(_dataCompleter.isCompleted) {
    return new Future.value(true);
  } 
  return _dataCompleter.future;
}

并称之为

func().then((success) => /* continue here when `key` in `data` has a value.

关于Dart:使用 Futures 异步填充静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26732078/

相关文章:

flutter - Dart :为什么本地函数不能互相调用?

DART:如何编写返回 Future 的耗时函数

dart - flutter中解析Json

arrays - 在 flutter/Dart 中解析 JSON

firebase - getter 'instance' 没有为类型 'Firestore' 定义

dart - Dart 中的完成者和 future ?

Dart 返回函数的值

dart - 无需等待即可从异步函数的生成器中生成值

dart - 客户端,那么()还是其他?

Dart 事件队列和微任务