javascript - AngularJS Controller promise then 不是一个函数

标签 javascript angularjs controller factory

我在 Controller 中做出 promise 时遇到了麻烦。

Plunker Editor Sample

这是包含模块、 Controller 和工厂的代码 当我调用Factory并等待响应时,一切正常。

我在控制台中收到错误“Then 不是函数” 但我不知道代码有什么问题

angular
    .module('sampleApp', [])
    .controller('SampleController', SampleController)
    .factory('myFactory', myFactory);

////////// FACTORY
    function myFactory () {

    var task = {
      getData : getData,
      counter:  0
    };

    return task;


    // Implementation details //
    // ---------------------- //

    function getData () {
      task.counter ++;
      var response = "FakeData";
      return response;
    }
  }

////////// CONTROLLER
  function SampleController (myFactory, $log) {
    $log.info("Sample controller initialized");

    var vm = this;
    vm.title = "SampleView";
    vm.callFactory = callFactory;
    vm.factoryResponse;

    callFactory();

    // Implementation details //
    // ---------------------- //

    function callFactory () {

      myFactory.getData()
      .then(function (data) {
        vm.factoryResponse = data;
        return vm.factoryResponse;

      })
      .catch(function () {
        $log.error("Ups! We cannot complete the request :(");
      });
    }
  }

最佳答案

因为你的工厂方法getData返回string。如果你想使用then,那么你的方法需要返回$promise。像这样plunker :

////////// FACTORY
function myFactory ($q) {

var task = {
  getData : getData,
  counter:  0
};
var defer = $q.defer();

return task;


// Implementation details //
// ---------------------- //
function getData (randomParameter) {
  task.counter ++;
  var secondString = ", sample factory value"
  var response = randomParameter + secondString;
  defer.resolve(response);
  return defer.$promise;
}}

更多关于angular $q

关于javascript - AngularJS Controller promise then 不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35267705/

相关文章:

javascript - 在 JS 代码中使用响应文本中的元素

javascript - 未捕获的类型错误 : Cannot read property 'val' of null jquery

javascript - AngularJS 轮询 $http 和 $timeout 不更新 View

javascript - AngularJS 中的 View - 如何使它们工作?

controller - NullPointerException (JavaFX Label.setText())

javascript - 关于AJAX,需要点击提交按钮两次

javascript - 通过ajax调用Google Maps Api不起作用

javascript - 单元测试 Angular Controller

javascript - AngularJS $scope.foo 使用服务设置,但稍后在同一 Controller 中未定义

ruby-on-rails - 在 Rails 更新方法中重构硬编码链接的最佳方法?