4

要素のすべてのインスタンスに対して静的変数を 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 });
  }
}

問題は、他のインスタンスが if にある時点でキーがマップに含まれていないため、すべてのインスタンスが else に入ることです。したがって、データがマップに表示されるまで待つ必要があります。

4

2 に答える 2

2

Günter Zöchbauer への返信。私は通常、Completers を直接使用することを避けます:

static var data = new Map();
static Future _pendingFuture;

Future func() {
  if (_pendingFuture == null) {
    _pendingFuture = Helper.getData().then((requestedData) {
      list = requestedData;
      Elem.data.addAll({ 'key' : requestedData });
    });
  }
  return _pendingFuture;
}
于 2014-11-05T07:27:05.893 に答える