2016-02-03 42 views
0

我將數據發佈到Python API,並且API響應返回想要在控制器中使用的數據,並最終在與該視圖關聯的HTML部分中使用該數據。我能夠成功地獲取數據,因爲我正在記錄來自調用的response.data,但是當我從控制器調用該方法時,出現錯誤,指出無法讀取未定義的「then」屬性。從AngularJS獲取數據來自工廠的控制器中的HTTP post調用

function getCustomerGraphData(payload, config) { 

     var data = { 
      user_selection: JSON.stringify(payload), 
      index_info: JSON.stringify(config.index_info), 
      column_config: JSON.stringify(config.Results) 
     }; 

     console.log("data", data); 

     $http({ 
      url: 'URL', 
      method: "POST", 
      data: $.param(data), 
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 
     }).then(function(response) { 
      var customer = response.data; 

      console.log("data", customer); 

      return customer; 
     }); 

    } 

服務

arisService.getCustomerGraphData() 
     .then(function(data){ 
      $scope.overIndexData = data; 
     }) 

控制器

回答

1

確保您的服務返回一個promise這樣你就可以調用它的then方法,看看爲$q的更多信息,承諾:

function getCustomerGraphData(payload, config, $q) { 
    // initialize the defer object 
    var deferred = $q.defer(); 

    var data = { 
     user_selection: JSON.stringify(payload), 
     index_info: JSON.stringify(config.index_info), 
     column_config: JSON.stringify(config.Results) 
    }; 

    console.log("data", data); 

    $http({ 
     url: 'URL', 
     method: "POST", 
     data: $.param(data), 
     headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 
    }).then(function(response) { 
     var customer = response.data; 

     console.log("data", customer); 

     // resolve the promise with your data 
     deferred.resolve(customer); 
    }); 

    // return the promise 
    return deferred.promise; 

} 
+0

真棒!如果我有多個方法,我可以將q.defer聲明爲全局變量並在整個服務中使用它? –

+0

如果您正在討論處理多重承諾我建議您查看$ q.all,您可以將其傳遞給承諾數組,並且它會返回一個承諾,當您通過承諾的所有承諾都會解決時承諾。 –

0

進樣$q爲廠內,然後promisify你的方法依賴,

function getCustomerGraphData(payload, config) { 
     var deferred = $q.defer(); 
     var data = { 
      user_selection: JSON.stringify(payload), 
      index_info: JSON.stringify(config.index_info), 
      column_config: JSON.stringify(config.Results) 
     }; 

     console.log("data", data); 

     $http({ 
      url: 'URL', 
      method: "POST", 
      data: $.param(data), 
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 
     }).then(function(response) { 
      var customer = response.data; 
      deferred.resolve(customer); 
      console.log("data", customer); 

      return customer; 
     }); 
     return deferred.promise; 
    } 
相關問題