我有一个AngularJS服务,它从服务器获取一个带有JSON对象的数组。
在服务中,我需要从提取的服务列表中获取“getElementByID(ID)”函数。 (或通过XY获取元素)
我的问题是,当我开始搜索时,列表还没有出现。它似乎无法解决服务本身的承诺 - 是否总是需要从外部解决?
我在这里创建了一个Plunker来描述问题:http://plnkr.co/edit/Hlyg3mGPi7RKFHmcK1ZM?p=preview
如何搜索服务中承诺的数组?
感谢您的帮助!
答案 0 :(得分:2)
你是对的,为了处理数组 - 你需要首先用.then
解包承诺,然后使用返回值是另一个承诺的事实。
例如:
// return if in a service method
var p = $http.get("http://jsonurl").then(function(result){
return result.filter(function(el){ return el.id === "foo"});
});
p.then(function(value){
// value is an array that contains only elements with property `id === "foo"`
});
例如,您可以创建一个获取数据的方法:
var data = null;
function getData(){
return $q.when(data || $http.get("http://jsonurl")).then(function(val){
return data = val; // cache and return the result;
}); // either data, or cached data
}
现在,您可以在服务上创建getByPredicate:
function get(predicate){
return getData().then(function(arr){
return arr.filter(predicate);
});
}
可以让你这样做:
get(function(el){ return el.id === "foo"; }).then(function(values){
//values is all the array elements with an id property whose value is foo.
});