Winkel-Versprechen - nicht-lese-Eigenschaft dann undefined
Ich versuche, das Ergebnis einer Verheißung im Blick, aber ich bekomme diese exception. Andere Fälle dieser Ausnahme habe ich bei Google gefunden /SO werden verursacht durch Fehler sehe ich nicht in meinem code.
Habe ich überprüft, ich bin mit Versprechungen, ich bin der Lösung das Versprechen innerhalb der Funktion übergeben $timeout, bin ich wieder das Versprechen von der Funktion getData() und nicht die Funktion, löst das Versprechen.
Vielen Dank im Voraus.
Viewer
<html ng-app="controller" ng-controller="MyController as controller">
<head>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.16/angular.min.js"></script>
<script type="text/javascript" src="controller.js"></script>
<script type="text/javascript" src="services.js"></script>
</head>
<body>
{{data}}
</body>
</html>
Controller (controller.js)
angular.module('controller', ['services'])
.controller('MyController', ['MyService', function(MyService) {
MyService.getData().then(function(data) {
$scope.data = data;
});
}]);
Service - (services.js)
angular.module('services', [])
.factory('MyService', function($q, $timeout){
var getData = function getData() {
var deferred = $q.defer;
$timeout(function () {
deferred.resolve('Foo');
}, 5000);
return deferred.promise;
};
return {
getData: getData
};
});
Ausnahme-stack-trace -
TypeError: Cannot read property 'then' of undefined
at new <anonymous> (controller.js:5)
at Object.e [as invoke] (angular.js:4219)
at $get.x.instance (angular.js:8525)
at angular.js:7771
at q (angular.js:334)
at M (angular.js:7770)
at g (angular.js:7149)
at angular.js:7028
at angular.js:1460
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie nicht immer deferred-Objekt ordnungsgemäß, statt
deferred
variable enthält die Funktion Verweis, die Sie verpasst Anrufung aufschieben Konstruktor.beachten Sie auch, dass Sie könnte einfach zurück
$timeout
wie es ist, da gibt es ein Versprechen. In Ihrem wirklichen Fall, wenn Sie mit$http
nur return $http Versprechen, anstatt eine redundante promise-Objekt mit latente Muster.