Angular JS$http承诺表现得像真正的$q承诺吗?
Do Angular JS $http promises to behave like true $q promises?
我知道Angular可以处理来自控制器内部的承诺。 例如:
function MyCtrl($scope) {
$scope.myvar = getDeferredPromise();
}
主角度摘要循环优雅地处理这个问题,将延迟函数最终返回给 myvar 的任何值分配。
但是,尽管 $http.get() 方法返回了一个承诺,但我无法让它以这种方式工作。 例如:
function MyCtrl($scope, $http) {
$scope.myvar = $http.get('/url');
}
get 方法返回的"promise"有一个成功方法,该方法采用一个函数,该函数分配了希望分配给 myvar 的数据。
但是,它还有一个 then 方法 - 但它给定整个响应对象 - 而不仅仅是数据部分! 这似乎最终被分配给了myvar!
这个小提琴可能会有所帮助:http://jsfiddle.net/QKnNC/1/
我在这里做错了什么吗?或者这在某种程度上是"设计使然"?
ng.$http
$http服务是一个接受单个参数的函数 — 配置对象 — 用于生成 HTTP 请求和 返回具有两种$http特定方法的承诺:成功和错误。
$http
返回一个承诺,因此您需要链接then
以获取数据。
IPService.getV1().then(function (response) {
console.log(response)
$scope.value1 = response.data;
});
then
是通用的 promise 函数,它接受成功和错误回调,你会得到解析的值,无论它是什么。 success
和error
$http
特定于的,并且是then
的别名,但有一个例外:它们设置了一堆有用的参数,而不仅仅是数据。见源头。
这是设计使然。 您的getV2()
方法就是您想要的。 由于您使用的是 GET,因此您可以保存您的承诺结果,并在后续调用 getV2()
时返回该结果:
var v2promise, v2data;
return {
getV2: function() {
if(!v2promise) {
v2promise = $http.get('http://ip.jsontest.com/').then(
function(response) {
v2data = response.data;
return v2data;
});
}
return v2promise;
}
}
相关文章:
- Angular中的过滤和$http承诺
- $http中的Angular 1数据绑定承诺不起作用
- 如何同时使用节点承诺和 http
- 承诺中的成功回调不会发生$http
- angular服务中的$http承诺
- 同步解决HTTP延迟承诺
- 成功之间的区别,然后随着决心,承诺,http在angularjs中
- 进行多个 http 调用并使用承诺合并结果
- 如何将 $http.put 封装到一个函数中,该函数执行某些操作,然后返回通过或失败的承诺
- 有问题与承诺角度.控制台日志不适用于 HTTP 请求
- 拒绝$http成功的承诺
- AngularJS$http承诺异常不会冒泡
- 在$http内解决/拒绝承诺是行不通的
- 使用 $http.post 和 res.redirect,而不解决承诺
- 如何获得$http API 调用的承诺
- 刷新从承诺返回$http数据
- Angular $http.json 承诺返回错误,尽管我可以看到响应
- 从工厂返回控制器$http承诺时未定义
- 角度$http承诺无法解决
- 使用 http.get node.js 的承诺