我正在尝试编写一个返回promise的函数 . 但有时候请求的信息是立即可用的 . 我想将它包装在一个承诺中,以便消费者不需要做出决定 .
function getSomething(id) {
if (Cache[id]) {
var deferred = $q.defer();
deferred.resolve(Cache[id]); // <-- Can I do this?
return deferred.promise;
} else {
return $http.get('/someUrl', {id:id});
}
}
并像这样使用它:
somethingService.getSomething(5).then(function(thing) {
alert(thing);
});
问题是回调不会针对预解析的承诺执行 . 这是合法的事吗?有没有更好的方法来处理这种情况?
5 回答
Short answer: Yes, you can 在您返回之前解决AngularJS承诺,并且它将按照您的预期运行 .
从JB Nizet's Plunkr开始,但重构为在最初要求的内容(即函数调用服务)的上下文中工作,并且实际在现场 .
服务内...
控制器内部....
我希望它对某人有帮助 . 我没有发现其他答案非常明确 .
如何在Angular 1.x中简单地返回预先解析的promise
已解决的承诺:
拒绝的承诺:
如果我想在数组或对象中实际缓存数据,我通常会这样做
DEMO
您忘记初始化Cache元素
我喜欢使用工厂从我的资源中获取数据 .
然后在这里像这样在服务中公开我的模型
然后,我的控制器可以包含它并将其暴露或者仅仅通过引用注入的Service来执行它在其上下文中所做的事情 .
似乎工作正常 . 但我对角度有点新意 . *为了清楚起见,错误处理大多被遗漏