看一下工厂里返回的这个方法:
fetchEmployeeList: function() {
var q = $q.defer();
$http.get('/Employee/')
.success(q.resolve)
.error(ajaxErrorHandler.handleError);
return q.promise;
}
此代码的作者说,这是我们应该用于从HTTP端点返回数据的模型。基本上,只要我们需要服务中的数据,我们就应该使用这种模式。作者认为这比返回$ http.get()的返回值更受欢迎。
但是,我不明白这段代码的重点。我以为$ http.get() 会返回一个承诺。有人可以解释这个示例代码段正在做什么或他们认为作者可能会尝试做什么?
答案 0 :(得分:1)
那是递延的anti-pattern,在不需要的时候实际上会扭曲一个承诺。
在你的情况下,返回q.promise似乎是一种滥用,因为HTTP对象本身可以返回一个promise。
我将代码重构为以下内容:
fetchEmployeeList: function() {
return $http.get('/Employee/');
}
您可以查看此blog post以获取更多参考资料,
不要害怕与建议采用这种做法的人开启讨论。