0
我發送一個ajax請求來從服務器獲取數據並將其存儲在本地變量中。這是內部服務。然後在控制器中,我使用承諾在需要時獲取數據。它第一次工作,因爲沒有檢測到緩存,並承諾返回,但下一次開始,我沒有從服務函數返回任何承諾,因此JavaScript錯誤。AngularJS繞過承諾,如果數據存在於緩存中
我的服務功能是:
getProductDetails: function(product) {
if(!productDetailsArr[product.id]) {
if (!promiseProductDetails) {
// $http returns a promise, which has a then function, which also returns a promise
promiseProductDetails = $http.get(product.id + '/productdetails.json').then(function(response) {
productDetailsArr[product.id] = response;
return productDetailsArr[product.id];
});
}
// Return the promise to the controller
return promiseProductDetails;
} else {
return productDetailsArr[product.id];
}
}
在控制器我有下面的代碼調用上面的函數:
ServiceData.getProductDetails($scope.product).then(function(data) {
$scope.productDetails = data;
});
所以在第二次起,我得到JS錯誤:
TypeError: ServiceData.getProductDetails(...).then is not a function
任何想法如何解決這個問題。
工作在第一次去,不得不注入$ q雖然。 – Sandeep
else塊可能更短:'return $ q.when(productDetailsArr [product.id]);' – Styx