2017-04-06 32 views
0

調用服務後,我的變量沒有值。我定義的成功,函數作爲一個單獨的功能,並把它稱爲在.then()方法,下面的代碼:如何用服務填充變量值(AngularJS)

// Code inside the Ctrl: 
var successData = null; 
vm.fillVar = null; 
vm.loadData = loadData; 

// service func 
function loadData() { 
    return $timeout(function() { 
     vm.fillVar = vm.fillVar || []; 

     if (vm.fillVar == undefined || vm.fillVar.length == 0) { 
      CrudSvc.GetAllData().$promise.then(success, error); 

      console.log('Success Variable: ', successData); //--> here, the successData variable contains no data 
      vm.fillVar = successData; 
      console.log('fillVar for the view: ', vm.fillVar); //--> fillVar is empty, why?? 
     } 
    }, 500); 
} 

// success func 
function success(res) { 
    console.log('var res: ', res); //--> res contains data 
    successData = res; 
    console.log('success func: ', successData); //--> the variable contains data 
} 

我不明白爲什麼successData變量調用成功函數之後空。這有點令人困惑......有沒有人可以解決這個問題?

+0

u能張貼代碼爲CrudSvc.GetAllData() –

+2

何不你是不是在'function success'裏面設置'vm.fillVar',並避免使用'successData'變量 – codtex

+1

你期望同步執行不是異步的呼叫。希望你知道核心JS – Nirus

回答

3

此代碼是異步CrudSvc.GetAllData().$promise.then(success, error);所以如果你想在那之後執行的東西,你應該更改您的代碼:

CrudSvc.GetAllData().$promise.then(success, error).then(function(){ 
    // this code is executed after all the previous code is done and succeed 
    console.log('Success Variable: ', successData); 
    vm.fillVar = successData; 
    console.log('fillVar for the view: ', vm.fillVar); 
}); 

你可以閱讀有關thenHERE

當時的方法返回一個承諾,允許方法鏈接。

編輯

如果你想處理錯誤的情況簡單地使用reject功能如下:

CrudSvc.GetAllData().$promise.then(success, error).then(function(){ 
    // this code is executed if previous success 
}, function(){ 
    // this code is executed if previous error 
}); // This is how you do further error handling via this approach 
+0

什麼是,當預計錯誤?我在error函數中定義了err變量,它會立即在視圖中顯示錯誤。 – yuro

+0

@yuro檢查編輯如何處理錯誤 – codtex

+0

感謝您的支持。目前這是一個很好的方法:) – yuro

0
// Code inside the Ctrl: 
var successData = null; 
vm.fillVar = null; 
vm.loadData = loadData; 

// service func 
function loadData() { 
    return $timeout(function() { 
     vm.fillVar = vm.fillVar || []; 

     if (vm.fillVar == undefined || vm.fillVar.length == 0) { 
      CrudSvc.GetAllData().$promise.then(function(response) { 
successData = response; 
    console.log('Success Variable: ', successData); //--> here, the success variable now contains no data 
      vm.fillVar = successData; 
      console.log('fillVar for the view: ', vm.fillVar); //--> fillVar is empty, why?? 
}, function(error) { 
}); 


     } 
    }, 500); 
} 
+0

我已經知道這個解決方案。但不是我期待的解決方案。不過謝謝你的支持:) – yuro