开发者问题收集

函数返回未定义的 AngularJS

2015-02-11
4306

下面是我的控制器代码:

///////
//Diary Notes Controller
///////
diary.controller('NotesController', ['$scope','$http', 'notesService', function ($scope, $http, notesService){

//
//Get the Notes data back from the Server
//

$scope.updateFunc = function () {

    var notes = notesService.getText();

    console.log(notes);

};

$scope.updateFunc();

以及我的服务代码:

diary.factory('notesService', function ($http) {

return {

    getText: function () {

        $http.get('www/getNotes.php')
            .then(
            function (payload){
                return payload.data;
            });

    }

}

});

基本上,当我执行 console.log 时,控制器返回 notes 变量的未定义值,这看起来很尴尬,因为当我使用控制器获取有效载荷时它可以工作,但从服务返回有效载荷似乎不起作用。

3个回答

$http.get 是异步函数,返回 HttpPromise 。有几种方法可以获取 data

1.传递 callback ,如下所示

diary.factory('notesService', function($http) {
  return {
    getText: function (callback) {
      $http.get('www/getNotes.php')
      .then(
        function(payload) {
          callback(payload.data);
        });

    }
  }
});


notesService.getText(function (notes) {
  console.log(notes);
});

2.返回 promise

diary.factory('notesService', function($http) {
  return {
    getText: function () {
      return $http.get('www/getNotes.php');
    }
  }
});

notesService.getText().then(
    function(payload) {
        callback(payload.data);
    });
Oleksandr T.
2015-02-11

您获得 undefined ,因为您没有从 getText() 中返回任何内容。在 $ http 在您的方法中添加返回语句:

273763261

之后致电 然后 Promise的方法要获取值:

443946383
Miguel Mota
2015-02-11

$http.get 返回一个 Promise

由于 then 中的 promise 回调是异步的,因此您需要在控制器中处理该 promise。为此,首先在工厂中返回该 promise:

return $http.get('www/getNotes.php')  <-- return added at the beginning of this line
.then(function (payload){
    return payload.data;
});

然后,在控制器中处理该 promise:

$scope.updateFunc = function () {   
    notesService.getText().then(function(notes) {     
        console.log(notes);
    });;
};
Davin Tryon
2015-02-11