如何将promise的结果传递给AngularJS中的控制器

时间:2015-08-25 13:33:55

标签: javascript angularjs promise angular-promise

在控制器中,我需要检索段的状态。使用$resource从API加载细分。

在资源中,segmentsresource.js我有:

angular.module('appApp')
  .factory('SegmentsResource', function ($resource) {
    return $resource('http://localhost:3000/api/v1/segments/:id');
  });

在服务中,segmentsservice.js我有:

angular.module('appApp')
  .service('SegmentsService', function (SegmentsResource) {
    this.getSegmentStatus = function(segmentId) {
      return SegmentsResource.get({
        id: segmentId
      }, function(segment) {
        return segment.status;
      })
    };
  });

我正在尝试return segment.status,因此我可以在控制器main.js中使用结果('可用','已翻译'等):

$scope.checkAndEditSegment = function(segmentId) {
  SegmentsService.getSegmentStatus(segmentId)
    .then(function(status) {
      if (status === 'available') {
        console.log('segment is available');
      }
    });
};

然而,这不起作用。控制台吐出:TypeError: Cannot read property 'then' of undefined',所以我的承诺有问题。

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

但是,当您只需从控制器呼叫工厂时,为什么要采用这条漫长的路线。

angular.module('appApp')
  .factory('SegmentsResource', function ($resource) {
    return $resource('http://localhost:3000/api/v1/segments/:id');
  });

$scope.checkAndEditSegment = function(segmentId) {
  SegmentsResource.get(segmentId)
    .then(function(status) {
      if (status === 'available') {
        console.log('segment is available');
      }
    });
};

答案 1 :(得分:0)

我决定使用$q

在服务中:

this.getSegmentStatus = function(segmentId) {
  var dfd = $q.defer();

  SegmentsResource.get({ id: segmentId }, function(segment) {
    dfd.resolve(segment.status);
  })

  return dfd.promise;
};

在控制器中:

SegmentsService.getSegmentStatus(segmentId)
    .then(function(status) {
      console.log(status);
    });