dip*_*rus 8 angularjs angular-http angular-promise
观看了很多Egghead.io视频,我注意到一个常见的模式是返回自定义承诺并在回调中解决它.
.factory('myFact', function($q, $http) {
return {
getData: function() {
var deferred = $q.defer();
$http.get('/path/to/api')
.success(function(data) {
deferred.resolve(data);
});
return deferred.promise;
}
};
});
Run Code Online (Sandbox Code Playgroud)
我通常会这样写:
.factory('myFact', function($http) {
return {
getData: function() {
return $http.get('/path/to/api')
.then(function(res) {
return res.data;
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
返回$q.defer()承诺而不是$http承诺是否有任何好处?这些方法与我相同.
不,没有优势,它是相同的,在您的第一个代码片段中,您创建了一个$q.defer()实例,然后调用它的resolve()方法来创建一个已解决的 Promise。
这是您在使用异步函数和未来对象时需要了解并在angularJs中传递 throw 的过程,这些对象在未来某个时刻将具有不同的值或新数据,您需要知道它何时发生,因为应用程序中的相关方可能会需要在延迟任务完成时访问其结果。
现在,当使用$http时,您不必执行任何操作,因为它已经返回一个已解决的承诺,您可以直接调用它的then()方法,除非您有不同的方式来做事并且需要实现不同的方法方法。
但并非所有 AngularJs 服务都会为您完成这项工作,$resource例如,可以查看一下,它包装$http用于 RESTful Web API 场景。$resource不会返回已解决的承诺,承诺是的,您将得到一个承诺,但您需要执行解决它的最后一步(检查此堆栈问题或此,也许还有这篇有关 Amber Kaplan 自己使用 Rest 的经验的文章)。
因此,您的做法很好,这也是我在使用时的做法$http,但是当我们需要以不同的方式做事$http或强迫其他人做事时,我们都会搜索第一个片段代码。 “与 AJAX 一起工作”或“像 AJAX 一样工作”的服务。
| 归档时间: |
|
| 查看次数: |
2402 次 |
| 最近记录: |