AngularJS:搜索从服务中的promise返回的数组

时间:2014-05-14 16:50:53

标签: javascript angularjs promise

我有一个AngularJS服务,它从服务器获取一个带有JSON对象的数组。

在服务中,我需要从提取的服务列表中获取“getElementByID(ID)”函数。 (或通过XY获取元素)

我的问题是,当我开始搜索时,列表还没有出现。它似乎无法解决服务本身的承诺 - 是否总是需要从外部解决?

我在这里创建了一个Plunker来描述问题:http://plnkr.co/edit/Hlyg3mGPi7RKFHmcK1ZM?p=preview

如何搜索服务中承诺的数组?

感谢您的帮助!

1 个答案:

答案 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.
});