我想问一下,then()可以在任何函数上使用吗?
在我的Angular应用程序中,当我尝试使用then时,我看到一个错误('cannot read property then of undefined')。
例如,我有这个函数:
self.getCommentsData = function() {
commentsService.getComments($routeParams.id)
.then(function (data){
//Do some stuff and at the end push to a scope array
$scope.commentsList.push(someValue);
});
}稍后,我想调用此方法,然后(也只有在那时)在完成后调用另一行代码,也就是我使用的then
self.getCommentsData()
.then(function(){
$location.hash('goTotrue');
$anchorScroll();
});这给了我一个错误--想知道我做错了什么吗?
谢谢
发布于 2016-05-10 23:46:39
你需要返回一个promise,如果你不这样做,这个错误仍然会出现。如果您看到angular documentation,您可以找到以下内容:
延迟对象的目的是公开关联的Promise实例以及可用于通知成功或不成功完成以及任务状态的API
为了说明这一点,我制作了以下代码片段:
angular
.module("myApp", [])
.controller("myCtrl", myCtrl)
.service("myService", myService)
myCtrl.$inject = ["myService"];
myService.$inject = ["$q", "$timeout"];
function myCtrl(myService){
var vm = this;
vm.data = [{user: "empty"}, {user: "empty"}, {user: "empty"}]
vm.message = "Just wait 3 seconds to retrieve the data";
myService.myPromise().then(function(res){
//success case. The promise has been resolved
vm.data = res;
vm.message = "Promise resolved!";
console.log("resultado");
console.log(res);
});
}
function myService($q, $timeout){
this.myPromise = function(){
var promiseObj = $q.defer(); //promise
var dummyData = [{user: 1}, {user: 2}, {user: 3}];
//this timeout is to ilustrate that the promise may take some time
//you don't need to use the $timeout service
$timeout(function(){
promiseObj.resolve(dummyData); //promise resolved
}, 3000);
//promise resolved
return promiseObj.promise;
}
}<!DOCTYPE html>
<html ng-app="myApp">
<head>
<script data-require="angular.js@1.3.14" data-semver="1.3.14" src="https://code.angularjs.org/1.3.14/angular.js"></script>
<link rel="stylesheet" href="style.css" />
</head>
<body ng-controller="myCtrl as ctrl">
<h1>Promise test</h1>
<h2>Dummy data</h2>
<h4>{{ctrl.message}}</h4>
<ul>
<li ng-repeat="data in ctrl.data">{{data.user}}</li>
</ul>
</body>
</html>
https://stackoverflow.com/questions/37141926
复制相似问题