返回AngularJS中函数的承诺值

时间:2014-09-22 09:09:44

标签: angularjs

我在输出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
};

此控制器功能的输出如下: output of function

但是,当我正在testje.$$state时,它会返回undefined。如何输出value对象?我无法在新的$ scope中输出payload变量,因为这些数据是动态的。

这是simplified version of this on Plunker

2 个答案:

答案 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()创建一个。

演示:http://plnkr.co/edit/FNYmZg9NJR7GpjgKkWd6?p=preview

UPD

这是将课程与教师相结合的另一项努力。

演示:http://plnkr.co/edit/SXT5QaiZuiQGZe2Z6pb4?p=preview

答案 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);

});