Angular中的过滤和$http承诺
Filtering and $http promises in Angular
我在从JSON文件中过滤数据时遇到了问题,JSON文件是一个由20个对象组成的数组。
在我的工厂里,我有这两种功能。
function getData() {
return $http
.get('mock.json')
.success(_handleData)
.error(_handleError);
}
function _handleData(data) {
var filteredData = _filterData(data, "name", "XYZ");
console.log('filteredData', filteredData);
return filteredData;
}
这里console.log("filteredData")只显示已过滤的元素(即20个中的3个);
下一个-在一项服务中,我有一个点击:
var filterMe = function () {
DataFactory
.getData(_address)
.success(_handleServiceData );
}
其中
var _handleServiceData = function (data) {
filtered = data;
};
问题是,为什么_handleServiceData中的"data"显示所有元素,而不是以前过滤的元素?
编辑:这是plunk-结果记录在控制台
因为您从_handleData
函数返回的filteredData
不会传递给您在filterMe
函数中附加的success
回调。这是因为您将回调附加在同一个promise上,因为success
函数不会像then
方法那样创建新的promise。所以为了解决这个问题,修改你的代码如下:
function getData() {
return $http
.get('mock.json')
.then(_handleData, _handleError); //use "then" instead of "success"
}
然后在filterMe
函数中:
var filterMe = function () {
DataFactory
.getData(_address)
.then(_handleServiceData );
}
因为promise是异步的,并且您似乎需要在分配filtered
之前将其值返回给调用者。
你应该做
function getData() {
return $http
.get('mock.json')
.then(_handleData); // then (for chaining), not success!
}
var filterMe = function () {
return DataFactory
// ^^^^^^ return a promise, not assign globals in async callbacks
.getData(_address)
.catch(_handleError); // I assume you want to deal with errors only in the end
}
相关文章:
- Angular中的过滤和$http承诺
- $http中的Angular 1数据绑定承诺不起作用
- 如何同时使用节点承诺和 http
- 承诺中的成功回调不会发生$http
- angular服务中的$http承诺
- 同步解决HTTP延迟承诺
- AngularJS$http承诺异常不会冒泡
- 从工厂返回控制器$http承诺时未定义
- 角度$http承诺无法解决
- Angular JS$http承诺表现得像真正的$q承诺吗?
- Angularjs模拟一个返回$http承诺的函数
- AngularJS -拒绝了使用$routeProvider:resolve的$http承诺
- Angular的$http承诺和回调函数没有触发
- Angular HTTP承诺返回空
- Angular js的Http承诺在typescript中
- 如何在$q下传递多个$http承诺
- 为什么这个对象在angular http承诺对象中是$window ?
- $http承诺不更新作用域(ng-hide)
- 拒绝Angular的$http承诺
- Angularjs $http承诺时没有返回对象