Я хочу установить значение тайм-аута, чтобы, если сервер не отвечает в этот конкретный временной интервал, тогда пользовательский интерфейс должен двигаться вперед и не ждать ответа. До сих пор я использовал синтаксис ниже, но пользовательский интерфейс повесился, ожидая ответа. Как я могу указать обратный вызов для сброса значений и информировать пользовательский интерфейс, который больше не нужно ждать.
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) {
})
});
Я читал здесь, что d3 xhr теперь поддерживает функцию тайм-аута. Как использовать это и выполнять обратный вызов при истечении времени запроса? Может ли кто-нибудь рассказать мне, как правильно использовать это? Я попытался использовать
.ontimeout(function(){console.log('request timedout!!'})
но это не сработало.
Я использую обещания, поэтому я хочу отказаться от обещания в случае тайм-аута. И я хочу передать UI те же самые значения, которые он получает, если я получаю сообщение об ошибке. В основном нулевые значения, чтобы он опустился. Но в случае таймаута пользовательский интерфейс не получает никаких значений, и мой загрузчик экрана работает.
ТИА.
Поскольку 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)
})
Предоставление выше тайм - аут рабочего кода здесь
Если вы используете d3.v4, вы можете использовать рабочий код тайм-аута здесь