2014-10-20 56 views
0

我想在我的控制器之一中使用promise來實現一個基本功能,以便在添加更復雜的功能之前確保它正常工作。我得到一個「類型錯誤:未定義的是不是一個功能」上的「然後(功能(數據){」在lockPromise方法在angularjs控制器中的承諾 - 如何實現

功能從視圖

$scope.lockPromise = function(fieldId) { 
     $scope.getLockMessage2(fieldId).getWeather() 
      .then(function(data) { 
       if (data === "returned SUCCESS info") { 
        alert("data is good"); 
       } else { 
        alert("FAILED"); 
       } 
      }, function(error) { 
       alert(error); 
      }); 
    }; 

二函數調用。在CTRL

$scope.getLockMessage2 = function(fieldId) { 
     return{ 
      getWeather: function() { 
       return $http.get('/api/getData') 
        .then(function(response) { 
         if (typeof response.data === "string") { 
          return response.data; 
         } else { 
          return $q.reject(response.data); 
         } 
        }, function(response) { 
         return $q.reject(response.data); 
        }); 
      } 
     }; 
    }; 

API GET

[Route("api/getData")] 
public HttpResponseMessage GetData() 
    { 

     string data = JsonConvert.SerializeObject("returned SUCCESS info"); 

     return new HttpResponseMessage 
     { 
      Content = new StringContent(data, Encoding.UTF8, "application/json") 
     }; 
    } 

編輯1: 代碼更新,以反映意見

+3

那'2nd'功能應該是在服務頁面,而比內部控制器的啓動。你幾乎就在那裏,只需要在你返回數據的地方做一些小改動。請參閱http://chariotsolutions.com/blog/post/angularjs-corner-using-promises-q-handle-asynchronous-calls/ – 2014-10-20 10:15:47

+1

'$ scope.getLockMessage2(fieldId).getWeather()'你正在返回對象而不是函數 – harishr 2014-10-20 10:22:05

+0

@RoyMJ我打算在測試後把它放入一個服務中 - 我知道這是微不足道的,但是服務的必要性是什麼? – alsco77 2014-10-20 10:23:41

回答

1

變化

$scope.getLockMessage2(fieldId).then 

$scope.getLockMessage2(fieldId).getWeather().then 
0

你$ scope.getLockMessage2返回一個對象,無法正常工作。

我認爲的代碼應(未測試):

$scope.lockPromise = function(fieldId) { 
    $scope.getLockMessage2(fieldId).getWeather() 
     .then(function(data) { 
      if (data === "good") { 
       alert("data is good"); 
      } else { 
       alert("FAILED"); 
      } 
     }, function(error) { 
      alert(error); 
     }); 
};