在服务中承担Angular承诺

时间:2013-08-28 21:10:14

标签: angularjs promise

在使用使用xhr而非$ http的第三方库时,在服务中使用promises的正确方法是什么?

        getSomething: function(user, repo) {
            var deferred = $q.defer();
        client.doSomething().promise().then(function(result) {
                $rootScope.$apply(function() {
                    deferred.resolve(result);
                });
            }, function(err) {  
                $rootScope.$apply(function() {
                    deferred.reject(err);
                });
            });
            return deferred.promise;
        }

使用像这样的$ rootScope似乎很丑陋而不是Angular-ish,但是将范围作为参数传递也是如此。 有没有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

这似乎是$q.when()的完美用途:

  

将可能是值的对象或(第三方)包装成$ q承诺。当您处理可能会或可能不是承诺的对象,或者承诺来自不可信任的源时,这非常有用。

$q.when()会返回$q承诺,因此您的代码可以简化为:

getSomething: function(user, repo) {
    return $q.when(client.doSomething().promise());
}