asynchronou后的返回值IndexedDb调用在angularJS(自定义过滤器)中的函数中完成

时间:2016-02-18 10:44:19

标签: javascript angularjs asynchronous return-value indexeddb

我编写了我的自定义AngularJS过滤器,它应该将id转换为name,它将从IndexedDb获得。 我写了这个过滤器:

cardsList.filter('getCollectionName', ['IndexedDb', function(IndexedDb) {
return function(idCollection) {
    var val = 'not';
    IndexedDb.getById(IndexedDb.STORES.COLLECTION_STORE, idCollection).then(function(data) {
        val = data.name;    //here dont work return data.name;
    }, function(err){
        $window.alert(err);
    });
   return val; // here is still 'not'
};  }]);

所以我有属性val,我想用id设置它的集合名称。但它的返回初始值'不'。 我知道内部呼唤不是可见的属性val。但是返回data.name;内部成功的回调不行。 我看了How do I return the response from an asynchronous call?,但我不明白如何解决我的问题。 我如何修复这个函数返回data.name来自回调?感谢名单

1 个答案:

答案 0 :(得分:0)

您可以使用angularjs的$ q服务。 当您的承诺在$ q.all(..)

中解析时返回值
cardsList.filter('getCollectionName', ['IndexedDb','$q', function(IndexedDb,$q) {
return function(idCollection) {
    var val = 'not';
    var promises=[];
    promises.push(IndexedDb.getById(IndexedDb.STORES.COLLECTION_STORE,idCollection).then(function(data) {
         val = data.name;    //here dont work return data.name;
         }, function(err){
           $window.alert(err);
        })
    );


    $q.all(promises).then(function(){return val;});
};  }]);