【发布时间】:2015-08-25 08:14:24
【问题描述】:
我发现很难理解“延迟反模式”。我想我原则上理解它,但我还没有看到一个超级简单的例子来说明什么是服务,有不同的承诺和反模式,所以我想我会尝试自己做,但看看我不是超级了解它,我会先得到一些澄清。
我在工厂(SomeFactory)有以下内容:
//url = 'data.json';
return {
getData: function(){
var deferred = $q.defer();
$http.get(destinationFactory.url)
.then(function (response) {
if (typeof response.data === 'object') {
deferred.resolve(response.data);
} else {
return deferred.reject(response.data);
}
})
.catch(function (error) {
deferred.reject(error);
});
return deferred.promise;
}
我检查它的对象的原因只是为了在$http.get()上添加一个简单的验证层
下面,在我的指令中:
this.var = SomeFactory.getData()
.then(function(response) {
//some variable = response;
})
.catch(function(response) {
//Do error handling here
});
现在据我了解,这是一种反模式。因为最初的延迟承诺会捕获错误并简单地吞下它。它不会返回错误,因此当调用此“getData”方法时,我会再次捕获错误。
如果这不是反模式,那么有人可以解释为什么两者都需要某种“回调”吗?当我第一次开始编写这个工厂/指令时,我预计必须在某个地方做一个延迟承诺,但我没有预料到双方都必须.catch()(也就是我想我可以让工厂返回响应或如果我做了SomeFactory.getData(),则会出现错误
【问题讨论】:
标签: angularjs angularjs-directive angularjs-service angular-promise