angularjs $ q和$ http关于承诺

迪伦

关于官方文档中的$ http:

$ http API基于$ q服务公开的延迟/承诺API。

$ http服务是一个带有单个参数(配置对象)的函数,该参数用于生成HTTP请求并返回承诺

那么下面的代码是什么意思:

var deferred = $q.defer();
var promise = deferred.promise;
var progress;
$http.get("https://api.github.com/repos/angular/angular.js/pulls")
.success(function(data){
    var result = [];
    for(var i = 0; i < data.length; i++){
        result.push(data[i].user);
        progress = (i+1)/data.length * 100;
        deferred.notify(progress);
    }
    deferred.resolve(result);
    })
.error(function(error){
    deferred.reject(error);
});
return promise;

如果$ http返回一个承诺,为什么我应该使用$ q来返回一个承诺?

lex82

推荐的$http服务使用方式如下:

$http({
  method: 'GET',
  url: '/someUrl'
}).then(function successCallback(response) {
    // success code here
  }, function errorCallback(response) {
    // error handling code here
  });

在这种情况下,您不必返回新的Promise,而只需将调用的结果返回给then()您期望的即可。

但是,该success()方法是一种便捷方法,已经将响应对象的字段作为单独的参数传递给了:

.then(function(response) {
  // do something with response.data, response.status, etc.
})

.success(function(data, status, headers, config) {
  // do something with data, status, etc.
})

但是,与相比then()success()不会返回承诺。我不建议使用它,而我只是在docs中看到,到目前为止它已被弃用。

更新:我认为您提供的示例中构造了另一个promise的原因不是success()可以使用而是可以调用deferred.notify(progress)如果没有显式创建另一个promise,您将无权访问该deferred对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AngularJS承诺$ q.all和SignalR

来自分类Dev

AngularJS承诺$ q.all和SignalR

来自分类Dev

AngularJS-为什么用$ http承诺($ q)?

来自分类Dev

如何为AngularJS $ q和$ http添加Typescript类型?

来自分类Dev

AngularJS验证和承诺

来自分类Dev

承诺与angularJS和Typescript

来自分类Dev

AngularJS验证和承诺

来自分类Dev

Angularjs承诺使用$ http

来自分类Dev

AngularJS和Q.fcall

来自分类Dev

AngularJS和Q.fcall

来自分类Dev

带有$ q承诺的Angularjs $ http删除导致TypeError:对象不是函数

来自分类Dev

在angularjs中计算待处理的$ q承诺

来自分类Dev

AngularJS $ q承诺无法按预期工作

来自分类Dev

在angularjs中计算待处理的$ q承诺

来自分类Dev

AngularJS,间谍和兑现承诺

来自分类Dev

AngularJS和茉莉,测试承诺

来自分类Dev

AngularJS $ http结果与承诺

来自分类Dev

AngularJS $ q.all和多个$ q.defer

来自分类Dev

AngularJS,$ http和transformResponse

来自分类Dev

如何处理可能是angularjs中$ q承诺的对象?

来自分类Dev

带有$ q的AngularJS执行顺序-链式承诺

来自分类Dev

AngularJS-$ q.all不以同步方式履行承诺

来自分类Dev

$ http / $ q调用上的angularjs禁用按钮

来自分类Dev

$ q.all和嵌套承诺

来自分类Dev

Q承诺传播错误和异常

来自分类Dev

q.all()进行重复的ajax调用(Angularjs,$ http,$ q)

来自分类Dev

关于承诺和需要异步/等待的澄清

来自分类Dev

angularjs 1和茉莉,服务承诺测试

来自分类Dev

AngularJS ng点击服务和承诺