我正在使用一個Angular工廠,它從Feed中檢索數據並對其執行一些數據操作。Angular:重寫函數以使用promise
我想阻止我的應用程序渲染第一個視圖,直到完成數據準備。我的理解是我需要爲此使用promise,然後在控制器中使用。然後調用可以在承諾解決後立即運行的函數。
從看atexamples我發現很難在我的工廠實施承諾。具體而言,我不確定將推遲和解決方案放在哪裏。任何人都可以權衡什麼是最好的實現方法?
這裏是不承諾我工作的工廠:
angular.module('MyApp.DataHandler', []) // So Modular, much name
.factory('DataHandler', function ($rootScope, $state, StorageHandler) {
var obj = {
InitData : function() {
StorageHandler.defaultConfig = {clientName:'test_feed'};
StorageHandler.prepData = function(data) {
var i = 0;
var maps = StorageHandler.dataMap;
i = data.line_up.length;
while(i--) {
// Do loads of string manipulations here
}
return data;
}
// Check for localdata
if(typeof StorageHandler.handle('localdata.favorites') == 'undefined') {
StorageHandler.handle('localdata.favorites',[]);
}
},
};
return obj;
});
這是我從看例子嘗試:
angular.module('MyApp.DataHandler', []) // So Modular, much name
.factory('DataHandler', function ($rootScope, $q, $state, StorageHandler) {
var obj = {
InitData : function() {
var d = $q.defer(); // Set defer
StorageHandler.defaultConfig = {clientName:'test_feed'};
StorageHandler.prepData = function(data) {
var i = 0;
var maps = StorageHandler.dataMap;
i = data.line_up.length;
while(i--) {
// Do loads of string manipulations here
}
return data;
}
// Check for localdata
if(typeof StorageHandler.handle('localdata.favorites') == 'undefined') {
StorageHandler.handle('localdata.favorites',[]);
}
return d.promise; // Return promise
},
};
return obj;
});
但沒有什麼是在控制檯中顯示,當我用這個在我的控制器:
DataHandler.InitData()
.then(function() {
// Successful
console.log('success');
},
function() {
// failure
console.log('failure');
})
.then(function() {
// Like a Finally Clause
console.log('done');
});
有什麼想法?
哪裏是你的'd.resolve()'?看來你沒有執行任何操作。 –
你也不會在任何地方撥打'prepData' –