0

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

        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 那样,但是将范围作为参数传递也是如此。有没有更好的方法来做到这一点?

4

1 回答 1

0

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

将一个可能是值或(第 3 方)then-able 承诺的对象包装到 $q 承诺中。当您处理可能是也可能不是承诺的对象,或者如果承诺来自无法信任的来源时,这很有用。

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

getSomething: function(user, repo) {
    return $q.when(client.doSomething().promise());
}
于 2013-08-29T04:25:34.263 回答