【问题标题】:How use HttpClient class to request multiple URLs without losing the relation between the URL如何使用 HttpClient 类请求多个 URL 而不会丢失 URL 之间的关系
【发布时间】:2017-02-07 23:05:00
【问题描述】:

我想请求一些 URL 并将结果与​​请求的数据结合起来。

例如,我想致电https://postman-echo.com/time/leap 了解一年是否是闰年。为此,我必须使用参数时间戳,例如: https://postman-echo.com/time/leap?timestamp=2016-01-01 返回 true。

在这种情况下,我有数据“2016-01-01”和结果“真”。结合两者后,我有:

{2016-01-01: true}

要检查多个日期,我想多次调用 URL 并获得如下结果:

{2015-01-01: false}
{2016-01-01: true}
{2017-01-01: false}

但我的实现未能结合数据值,我不知道为什么。我得到了结果

{2016-01-01: false}
{2017-01-01: false}
{2015-01-01: false}

这里的代码,我试图解决我的问题。 https://dartpad.dartlang.org/78049ae322d87cb73588e8cec28d0bdf

【问题讨论】:

    标签: rest http async-await dart


    【解决方案1】:

    这看起来像是一个竞争条件,_url_responseBody 可能不应该是成员变量。

    我会将_url 设为局部变量,而_sendRequest 实际上可以返回responseBody

    Future<Map<String, List>> sendRequestForLeapyear(String year) async {
      var url = "${_address}/time/leap?timestamp=${year}";
      var responseBody = await _sendRequest(url);
      var responseMap = JSON.decode(responseBody);
      var isLeap = responseMap['leap'];
      return {year : isLeap};
    }
    
    Future<String> _sendRequest(String url) async {
      HttpClient client = new HttpClient();
      return await client.getUrl(Uri.parse(url)).then((HttpClientRequest request) {
        request.persistentConnection = false;
        return request.close();
      }).then((HttpClientResponse response) {
        return response.transform(UTF8.decoder).join("").then((String body) {
          return body;
        });
      }).catchError((e) {
        throw new StateError("failed to poll $_url because: $e");
      }).whenComplete(client.close);
    }
    

    编辑:你也拼错了API端点的参数timestamp:D

    【讨论】:

    • 它失败了,因为 _sendRequest 应该返回一个 Future 但是当我将返回值更改为 Future 我会得到错误 The null object does not have a getter 'length'。
    • 我修复了代码,发现您拼错了 API 的参数。 timestamptimespamp
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2022-11-14
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 2010-09-05
    相关资源
    最近更新 更多