这是一个问题。当我运行这些代码时:
String responseText = null;
HttpRequest.getString(url).then((resp) {
responseText = resp;
print(responseText);
});
print(responseText);
在控制台中:
{"meta":{"code":200},"data":{"username":"kevin","bio":"CEO \u0026 Co-founder of Instagram","website":"","profile_picture":"http:\/\/images.ak.instagram.com\/profiles\/profile_3_75sq_1325536697.jpg","full_name":"Kevin Systrom","counts":{"media":1349,"followed_by":1110365,"follows":555},"id":"3"}}
null
它以异步方式运行。有同步方法的JAVA方式吗?在请求完成时,这将等待吗? 我发现只有一种棘手的方法,它很有趣 - 等待三秒钟:
handleTimeout() {
print(responseText);
}
const TIMEOUT = const Duration(seconds: 3);
new Timer(TIMEOUT, handleTimeout);
当然它适用于bug。那有什么建议吗?
MattB方式运作良好:
var req = new HttpRequest();
req.onLoad.listen((e) {
responseText = req.responseText;
print(responseText);
});
req.open('GET', url, async: false);
req.send();
答案 0 :(得分:3)
首先,我假设您将其用作客户端脚本而非服务器端。使用HttpRequest.getString将严格返回Future(异步方法)。
如果绝对必须有同步请求,则可以构造一个新的HttpRequest对象并调用传递命名参数的open方法:async: false
var req = new HttpRequest();
req.onLoad.listen((e) => print(req.responseText));
req.open('GET', url, async: false);
req.send();
但是强烈建议您使用异步方法来访问网络资源,因为像上面这样的同步调用会导致脚本阻塞,并且可能会使它看起来好像您的页面/脚本在网络连接不良时停止响应。 / p>