我正在尝试编写一个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 的异步特性吗?