Future.wait () - получить успешные ответы в любом случае - PullRequest
0 голосов
/ 24 марта 2020

У меня есть список фьючерсов, ответы на которые я хочу получить, и каждое будущее должно потерпеть неудачу через 10 секунд:

  List<Future<http.Response>> futuresList = new List<Future<http.Response>>();

  for (final blog in blogsList) {
    futuresList.add(http.get(blog.rssURL).timeout(const Duration(seconds: 10)));
  }

  try {
    List<http.Response> responses = await Future.wait(futuresList);
  } catch (e) {
    print("Futures list error: " + e.toString());
  }

Моя проблема заключается в естественном поведении функции wait() - даже когда только одно из фьючерсов выбрасывает исключение, все остальные теряются, и код попадает в блок catch ...

Есть ли способ получить все ответы и определить, какие один был успешным, что не было?

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

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

0 голосов
/ 24 марта 2020

вам нужно перехватить ошибку и вернуть ее как значение, попробуйте вот так:

    List<Future<http.Response>> futuresList=new List<Future<http.Response>>();

  for (final blog in blogsList) {
      futuresList.add(http.get(blog.rssURL).catchError((e) => e).timeout(const Duration(seconds: 10)));  
  }

    List<http.Response> responses = await Future.wait(futuresList);
    }

это даст вам ошибку как объект и добавит ее в ваши ответы.

...