import 'package:http/http.dart' as http;
main() {
String esearch = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=nucleotide&term=Paenibacillus";
var uidList = [];
http.get(esearch).then((response) {
var pattern = new RegExp(r"<Id>(.*?)</Id>");
var hits = pattern.allMatches(response.body);
hits.forEach((hit) {
print("whole match: " + hit[0] + " first match " + hit[1]);
uidList.add(hit[1]);
});
});
print(uidList.length); // empty, because main thread is faster than query
}
大家好,
我有一天会和Dart一起玩,想知道它是否适合我的需要。在我附加的代码中,我想访问http查询块之外的正文结果。这是不可能的。在这里的另一个问题,有人写这是因为Darts异步概念。
有没有办法从外面访问。这是导入的,因为我必须用结果数据触发几个htttp请求,并且不要将它们全部嵌套在http块中。
或其他任何建议?
非常感谢。
答案 0 :(得分:2)
这不会以这种方式工作,因为异步调用(http.get()
)被安排用于以后执行,而不是执行下一行。您的print
在http.get()
开始连接之前执行。你需要随后链接所有连续的调用。
如果您有最新的Dart版本,则可以使用async / await,这样可以更轻松地使用异步调用。
import 'package:http/http.dart' as http;
main() {
String esearch = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=nucleotide&term=Paenibacillus";
var uidList = [];
return http.get(esearch).then((response) {
var pattern = new RegExp(r"<Id>(.*?)</Id>");
var hits = pattern.allMatches(response.body);
hits.forEach((hit) {
print("whole match: " + hit[0] + " first match " + hit[1]);
uidList.add(hit[1]);
});
return uidList;
}).then((uidList) {
print(uidList.length);
});
}
异步/ AWAIT
import 'package:http/http.dart' as http;
main() async {
String esearch = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=nucleotide&term=Paenibacillus";
var uidList = [];
var response = await http.get(esearch);
var pattern = new RegExp(r"<Id>(.*?)</Id>");
var hits = pattern.allMatches(response.body);
hits.forEach((hit) {
print("whole match: " + hit[0] + " first match " + hit[1]);
uidList.add(hit[1]);
});
print(uidList.length);
}