エンドポイントが失敗した場合、またはリクエストへの応答に時間がかかりすぎた場合に備えて、JSON レスポンスをキャッシュしようとしています。
以前の Stackoverflow の質問から、これまでのところこの機能があります。問題は、この関数が実際のリクエストとは独立して常に前のリクエストを返すことです。この関数は複数のエンドポイントで使用されるため、一般的に前のリクエストを返すだけでなく、関数に渡す特定のエンドポイントの前のリクエストを返す必要があります。
var prevReq = $.Deferred().resolve().promise();
function getData(endpoint) {
var newReq = $.ajax({
type: "GET",
url: endpoint,
timeout: 2000
}).then(function(data){
// successful, set previous request to this request
console.log(prevReq);
prevReq = newReq;
return data;
},function(){
// it failed, return the previous successful request
return prevReq;
});
return newReq;
}
この関数を上記のように編集するにはどうすればよいですか? もう 1 つの問題は、最初の要求の後でのみタイムアウトする必要があることです。エンドポイントが最初の要求で正しく応答しない場合、オブジェクトは常に空になり、データが入力されないためです。
提案をありがとう。