定义Future时如下:
Future<HttpRequest> httpRequest = HttpRequest.request(url,
method: method, requestHeaders: requestHeaders);
我希望在5个secondes之后处理超时。我正在写这样的代码:
httpRequest.timeout(const Duration (seconds:5),onTimeout : _onTimeout());
我的超时功能是:
_onTimeout() => print("Time Out occurs");
根据Future timeout() method documentation,如果省略onTimeout
,超时将导致返回的未来完成TimeoutException
。但是使用我的代码,我的方法_onTimeout()
被正确调用(但是立即,不是在5秒之后),我总是得到一个
5秒后的TimeException ...(0:00之后的TimeoutException:05.000000:未来未完成)
我错过了什么吗?
答案 0 :(得分:8)
更改此行
httpRequest.timeout(const Duration (seconds:5),onTimeout : _onTimeout());
到
httpRequest.timeout(const Duration (seconds:5),onTimeout : () => _onTimeout());
或只是传递对函数的引用(不带()
)
httpRequest.timeout(const Duration (seconds:5),onTimeout : _onTimeout);
这样调用_onTimeout()
的闭包将传递给timeout()
。
在以前的代码中,_onTimeout()
调用的结果将传递给timeout()
答案 1 :(得分:0)
{{1}}