Как дождаться вызова веб-службы и доставить ответ нескольким источникам во Flutter - PullRequest
0 голосов
/ 04 августа 2020

У меня есть функция, которая извлекает данные из базы данных, и если данных нет, она вызовет веб-службу, поместит ответ в базу данных и вернет ответ.

Чтобы избежать многократного вызова веб-служба, которую я хочу, если есть несколько вызовов функции во время выполнения вызова веб-службы, каждый вызов после первого ждет ответа на первый вызов без вызова веб-службы.

Как я могу этого добиться?

Пример кода, который у меня есть:

Future<String> function() async {
    String data = await database.getData();
    if (data == null) {
        data = await callWebService();
        await database.setData(data);
    }
    return data
}

Если это важно, я использую Chopper для вызова веб-службы и Mobx для управления состоянием моего приложения .

1 Ответ

1 голос
/ 04 августа 2020

Вы можете использовать Completer для достижения желаемого. Проверьте пример кода ниже.

class TestService {
  Completer<String> _completer;

  Future<String> function() async {
    if (_completer == null) {
      _completer = Completer<String>();
    } else {
      return _completer.future;
    }

    String data = await database.getData();
    if (data == null) {
      data = await callWebService();
      await database.setData(data);
    }
    _completer.complete(data);
    _completer = null;
    return data;
  }
}
...