我想设置一个超时值,这样如果服务器在该特定时间范围内没有响应,那么UI应该向前移动而不是等待响应。到目前为止,我使用了以下语法,但UI被挂起等待响应。如何指定回调以重置值并通知UI不再需要等待。
q.promise(function(resolve, reject) {
d3.xhr(my_url)
.header('Content-Type', 'text/xml')
.timeout(2000)
.send(this.my_method, my_xmlData, function(error, data) {
})
});
我读到here d3 xhr现在支持超时功能。如何在请求超时时使用它并执行回调?谁能告诉我如何正确使用它?我尝试使用
.ontimeout(function(){console.log('request timedout!!'})
但它不起作用。
我正在使用promises,所以我想在超时的情况下拒绝承诺。并且我想传递UI接收的相同值,以防我收到服务错误。基本上是空值,以便它稳定下来。但是在超时的情况下,UI不会收到任何值,我的屏幕加载器会继续运行。
TIA。
答案 0 :(得分:2)
由于d3 v3不支持超时,你可以像这样超时:
var url = "https://mysafeinfo.com/api/data?list=englishmonarchs&format=xml";
let pr = new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.responseType = 'document';
xhr.overrideMimeType('text/xml');
xhr.open('GET', url, true);
xhr.timeout = 1; // time in milliseconds
xhr.onload = function(d) {
console.log("load", xhr.responseXML)
resolve(xhr.responseXML)
};
xhr.ontimeout = function(e) {
console.log("timeout")
reject({message: "I got timed out"});
};
xhr.send(null);
});
pr.then(function(data) {
console.log(data)
}, function(err) {
console.log(err)
})
提供更高的超时工作代码here
如果您使用d3.v4,则可以使用超时工作代码here