angularjs – Angular:返回$q.defer().promise而不是$http promise

前端之家收集整理的这篇文章主要介绍了angularjs – Angular:返回$q.defer().promise而不是$http 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;
        }
    };
});

我通常会这样写:

.factory('myFact',function($http) {
    return {
        getData: function() {
            return $http.get('/path/to/api')
                .then(function(res) {
                    return res.data;
                });
        }
    };
});

返回$q.defer()承诺而不是$http承诺有什么好处吗?这些方法与我相同.

不,没有优势,它是一样的,在你的第一个代码剪断你创建了一个 $q.defer()实例然后你调用它的resolve()方法来创建一个已解决的promise.

这是您在处理异步函数和未来对象时需要知道并传递throwJs的过程,这些对象具有不同的值或新数据,您将需要知道它何时发生,因为您的应用程序中的相关方可能会需要在完成时访问延迟任务的结果.

现在使用$http时,您不必执行任何操作,因为它已经返回已解决的承诺,您可以直接调用它的then()方法,除非您有不同的方法来执行操作,并且您需要实现不同的方法.

但并非所有angularJs服务都能为您完成工作,例如,查看$resource,它包含$http以用于RESTful Web API场景. $resource将不会返回已解决的承诺,承诺是,您将获得一个,但您需要执行解决它的最后一步(check this stack questionthis,也许this article about Amber Kaplan’s own experience working with Rest).

所以你如何做到这一点很好,这就是我在使用$http时也是这样做的,但是第一个代码片段是我们将需要以不同的方式做事时我们将要搜索代码. http或强制其他服务“与’合作’或’像’工作’AJAX.

猜你在找的Angularjs相关文章