私は以下のコードを書いています。 makeRequest
が呼び出され、xhrステータスが0のときに再試行したいと思います。問題は正しい約束を解決できないため、再試行ロジックはn番目の試行で正しい応答をフェッチしますが、呼び出し元メソッドに伝播できません。ステータス0の約n回の再帰的な約束を返すxhrリクエストを再試行する方法
この問題を解決するにはどうすればよいですか?ここで
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;
};
Doh!上記の「再試行中」が表示されない場合は、リフレッシュを実行してください。 –
ありがとうございます。これは私の現在の問題を解決しますが、それらのいずれかが解決された場合にスタックを呼び出すために追加されるすべての約束を解決する方法がありますか? – arbghl
@arbghl:はい、実際には本当に簡単です。あなたは約束で「解決」を呼びます。あなたがそれを呼び出す約束は、その約束に基づいて解決または拒否されます。上記の例を追加しました。 –