Флаттер, как перезапустить будущее? - PullRequest
0 голосов
/ 22 мая 2019

Возможно ли сделать будущее как-то похожим на повторно запускаемую задачу?Например, если я должен был сделать сетевой вызов, используя будущее, и это не удалось по причине аутентификации.Я хотел бы повторно запустить сетевой вызов в будущем, как только аутентификация прошла успешно.Как я могу это сделать?

Мой ожидаемый код, вероятно, будет выглядеть примерно так:

Future task = fetchData();

Future handleService(task) async {
  try {
    final data = await task;
    return data;
  } catch (ex) {
    // requires authentication
    if(ex.code == 202) {
      bool authSuccess = await reAuth();
      if (authSuccess) {
        await task
      }
    }
  }
}

1 Ответ

1 голос
/ 22 мая 2019

Простой ответ: вы не можете повторно запустить Future.

Будущее может быть завершено только один раз.Более того, Future представляет результат асинхронного вычисления.Я думаю об этом так: вы запускаете задачу , которая возвращает токен (Future).Когда задачи завершаются, он устанавливает значение на будущее.

Кроме того, Future может иметь свое значение, установленное только один раз, его нельзя завершить двумя различными значениями (даже задачей, результат которой он представляет). Когда значение установлено, оно всегда будет содержать одно и то же.один, и не разрешать изменение.

В вашем случае вам нужно снова вызвать fetchData.

Если у вас есть функция, которая может возвращать несколько значений, вы можете использовать Stream, но этот подход не подходит для вашей проблемы.

...