2016-02-18 13 views
0

我編寫了我的自定義AngularJS過濾器,該過濾器應將id轉換爲從IndexedDb獲取的名稱。 我寫這個過濾器:asynchronou IndexedDb調用後的返回值在angularJS(自定義過濾器)中的函數中完成

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,我想通過標識集合的名稱設置。但其返回初始值'不'。 我知道內部調用是不可見的財產val。但是返回data.name;在成功的回調內不工作。 我看着How do I return the response from an asynchronous call?,但我不知道如何解決我的問題。 我該如何修復這個函數從回調函數返回data.name? Thanx

回答

0

您可以使用$ j服務的angularjs。 當您的承諾解決$ 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;}); 
}; }]); 
+0

它看起來不錯,但如果我編輯我的代碼是這樣的。過濾器不工作(不要取代idCollection通過返回值。我需要返回該值從'這個:返回功能(idCollection){'功能。 如果我做var pom = $ q.all(promises).then(...然後我在var pom:Promise對象中使用該值,但我不知道如何訪問Promise - > $$ state-> value(控制檯登錄chrome) – Petr

+0

而爲什麼我需要$ q.all()?數組只有一個承諾 – Petr

+0

這就好比你在等待多個承諾,你可以將這些承諾推到promises數組,並且$ q.all正在等待所有承諾 –

相關問題