2
我正在编写基于$ .getJSON()和HTML5的sessionStorage作为缓存的基本存储库。如何从另一个承诺制定jQuery承诺
当第一次请求数据时,存储库将从Web服务读取数据并将其存储在sessionStorage中,以便下次从缓存中读取数据。以下是我的资料库与任务实体工作代码:
Storage.prototype.setObject = function (key, value) { this.setItem(key, JSON.stringify(value)); };
Storage.prototype.getObject = function (key) { return JSON.parse(this.getItem(key)); };
var repository = function() {
var getTasks = function() {
if (sessionStorage.getObject("Tasks") {
return $.Deferred().resolve(sessionStorage.getObject("Tasks")).promise();
}
else {
return $.getJSON("/gettasks").done(function (data) {
sessionStorage.setObject("Tasks", data);
}).promise();
}
}
var findTask = function (id) {
var item;
return getTasks().done(function (tasks) {
for(var t in tasks)
if(tasks[t].id == id)
item = tasks[t];
}).resolve(item);
}
return {
getTasks: function() { return getTasks(); },
findTask: function (id) { return findTask(id); }
};
}();
的getTasks返回类型是一个jQuery承诺反正(数据是从Web服务或从缓存中读取)。这里是仓库的在我的客户端代码的用法:
repository.getTasks().done(function (tasks) {
// display list
}).fail(function(err) {
// show error
});
现在我要的是通过相同的方式,通过其ID查找任务的另一个功能。所以我需要findTask函数调用getTasks函数,然后尝试通过id找到列表中的任务项。我的问题是现在返回承诺中的单个任务项目。但find方法现在返回整个列表(基本上它返回getTasks函数的结果)。但我需要它,就像我读取如下列表一样:
repository.findTask(765).done(function (task) {
// display task item 765
}).fail(function(err) {
// show error
});
非常感谢。
非常感谢。是*然后*工作。我会找出完成回调的方法。再次感谢对不起,我没有足够的声望投票:( – hamid
@ user2971645也看到更新 –