【问题标题】:Dart Future HttpCLientRequest Returns NullDart 未来的 HttpCLientRequest 返回 Null
【发布时间】:2018-11-09 20:43:15
【问题描述】:

Requests 类设置了一个 HttpClientRequest。 getTeamsJsonForRequest 方法应该返回 JSON 响应。但是,我假设没有正确分配变量“return”。 .then 响应中的打印“CONTS”成功打印了正确的响应,但打印“myres”部分显示结果为空。不确定为什么没有在 response.transform 部分分配结果。

class Requests {
    static Future getTeamsJsonForRequest(String reqPath) async{
        var result;
        HttpClient myhttp = new HttpClient();
        String path = '/api/v3' + reqPath;
        myhttp.get('www.thebluealliance.com', 80, path) 
        .then((HttpClientRequest request) {
            request.headers.set("accept", "application/json");
            request.headers.set("X-TBA-Auth-Key", "XXXXX");
            return request.close();
        })
        .then((HttpClientResponse response) {
             response.transform(utf8.decoder).transform(json.decoder).listen((conts) {
                print('CONTS: ' + conts.toString());
                result = json.decode(conts).toString();
            });
        });
        print('myres: ' + result.toString());
        return result;
        }
    }

【问题讨论】:

    标签: json http dart


    【解决方案1】:

    简答:避免在async 方法中使用Future.then

    您的print 在响应返回之前正在执行。 https://www.dartlang.org/tutorials/language/futures#async-await

    如果没有await,任何异步完成的工作都将在此函数中的后续语句执行后发生。

    我会这样写:

    Future<String> teamsJsonForRequest(String requestPath) async {
      var client = new HttpClient();
      var path = '/api/v3$requestPath';
      var request = (await client.get('www.thebluealliance.com', 80, path))
        ..headers.set("accept", "application/json")
        ..headers.set("X-TBA-Auth-Key", "XXXXX");
      var response = await request.close();
      var result =
          await response.transform(utf8.decoder).transform(json.decoder).single;
      print('myres: $result');
      return result;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-13
      相关资源
      最近更新 更多