localStorage
Railsがキャッシュされた結果をフェッチするのと同じように、小さなラッパーを書き込もうとしています。Railsのパターンは次のようになります。
# Data.find is a block which just returns the data if the cache key was not found
data = Rails.cache.fetch(key, options) { Data.find }
JavaScriptでは、キャッシュが空の場合にデータを返すために実行されるコールバックの結果を取得するのに苦労しています。
function fetch(key, callback) {
var result = localStorage.getItem(key);
if (result) {
return JSON.parse(result);
} else {
result = callback();
if (result) {
result = JSON.stringify(result);
localStorage.setItem(key, result);
}
return result;
}
}
私はそれをこのように使おうとしています:
var data = fetch('projects-delivered', function() {
var result;
d3.json('/projects/delivered.json', function(data) {
result = formatDates(data);
});
return result;
});
ただし、データは常に検出されません。別のコールバックを渡す必要がありますか、それとも何らかの方法で同期する必要がありますか?または、これはJavaScriptの非同期性では不可能ですか?