json - Dart 未来的 HttpCLientRequest 返回 Null
问题描述
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;
}
}
解决方案
简短的回答:避免在方法Future.then
内部使用async
。
在响应返回之前,您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;
}
推荐阅读
- python - 以度为单位的 Python hasrsine 公式还有很长的路要走
- javascript - 使用 Node 的“加密”模块时是否需要使用密钥派生?
- javascript - JavaScript:按常见项目字段组合项目值列表
- api - 将 LogMeIn Refresh Token Curl 转换为 Coldfusion
- java - 在 Java 对象中发送 Multipart 和 JSON 数据 - Spring Boot Rest
- python - 网上银行网页抓取
- google-cloud-platform - 有没有办法通过存储在 Google Cloud Storage 中的文本文档进行 grep?
- html - 寻找更简洁的语法来使用 css 网格重复模式的列?
- python - Python:类方法中的 *args 行为
- javascript - jQuery.val() 仅在使用 datepicker 的第二个事件上返回值