【发布时间】:2016-11-26 00:04:02
【问题描述】:
我已经编写了下面的代码。 makeRequest 被调用,我想在 xhr 状态为 0 时重试。问题是我无法解决正确的承诺,重试逻辑在第 n 次尝试中获取正确的响应,但无法传播到调用方方法。
我该如何解决这个问题。
var makeRequest = function(method, urlToBeCalled, payload) {
var deferred = $q.defer();
var xhr = new XMLHttpRequest();
xhr.open(method, encodeURI(urlToBeCalled), true);
setHttpRequestHeaders(xhr); // set headers
var response;
xhr.onload = function() {
if (xhr.status === 200 && xhr.readyState === 4 && xhr.getResponseHeader('content-type') !==
'text/html') {
try {
response = JSON.parse(xhr.response);
deferred.resolve(response);
} catch (e) {
deferred.reject(e);
}
} else if (xhr.status === 0) {
// retry here;
deferred.resolve(makeRequest(method, urlToBeCalled, payload));
} else {
try {
response = JSON.parse(xhr.response);
deferred.reject(response);
} catch (e) {
deferred.reject(xhr.response);
}
}
};
xhr.onerror = function() {
deferred.reject(xhr.response);
};
xhr.send(payload);
return deferred.promise;
};
【问题讨论】:
标签: javascript ajax xmlhttprequest promise q