我在输出promise函数的值时出现问题。
$scope.getTeacher = function(teacherAbr) {
var promise = dataService.getTeacher(teacherAbr);
var testje = promise.then(function(payload) {
return payload;
});
return testje; // outputs an d object, not the direct payload values
};
此控制器功能的输出如下:
但是,当我正在testje.$$state
时,它会返回undefined
。如何输出value
对象?我无法在新的$ scope中输出payload
变量,因为这些数据是动态的。
答案 0 :(得分:6)
在使用异步代码时,您应该改变对事物的思考方式。您不再返回值,而是使用Promise或回调模式在数据可用时调用代码。
在您的情况下,您的工厂可以是:
.factory('dataService', function($http, $log, $q) {
return {
getTeacher: function(teacher) {
// Originally this was a jsonp request ('/teacher/' + teacher)
return $http.get('http://echo.jsontest.com/key/value/one/two').then(function(response) {
return response.data;
}, function() {
$log.error(msg, code);
})
}
};
});
在控制器中使用:
dataService.getTeacher('Lanc').then(function(data) {
$scope.teacher = data;
});
此外$http.get
已经返回承诺,因此您不必再使用$q.defer()
创建一个。
这是将课程与教师相结合的另一项努力。
答案 1 :(得分:0)
//在您的服务文件中
return {
getTeacher: function (teacher) {
// Originally this was a jsonp request ('/teacher/' + teacher)
return $http.get('http://echo.jsontest.com/key/value/one/two')
})
//将控制器更改为此
dataService.getTeacher(teacherAbr).then(function(msg){
$scope.getdata=msg.data;
console.log("From server"+msg.data);
});