返回期间从对象中删除的功能

时间:2015-09-28 23:12:33

标签: javascript angularjs

我正在尝试在Angular中为我的承诺添加一个中止函数。调试代码时,我可以看到函数按预期添加。但是,当对象返回到调用服务时,该函数不再存在。我希望这是微不足道的。

.factory('MatchmakerSearch', ['$resource', 'OBB_ENV_CONF', '$q', function ($resource, 
  OBB_ENV_CONF, $q) {
  // Create the $resource object to handle the API requests
  function _query(params) {
    var _deferredAbort = $q.defer();

    var _request = $resource(OBB_ENV_CONF.API_HOST + 'int/matchMaker', {}, {
      'query': {
        method: 'GET',
        params: params,
        isArray: false,
        timeout: _deferredAbort.promise
      }
    });

    var _promise = _request.query().$promise.then( // Convert from $resource to $http
      function (response) {
        return response;
      }, function (response) {
        return $q.reject('Ajax call aborted');
      }
    );

    _promise.abort = function () {
      _deferredAbort.resolve();
    };

    _promise.finally(function () {
      _promise.abort = angular.noop;
      _deferredAbort = _request = _promise = null;
    });

    return _promise; // <~~~~ abort function exists here
   }
   return {
     query: _query
   }
 }
]);

拨打电话的服务如下:

_searchRequest = MatchmakerSearch.query(buildQueryParams()).then(function (result) { 
 // <~~~~ _searchRequest does not contain an abort() function.
  });

我真的认为编码会很简单。关于为什么我的功能在返回时消失的任何想法?

1 个答案:

答案 0 :(得分:1)

每次您使用thencatchfinally链接承诺时,您都会收到新的承诺:

_searchRequest = MatchmakerSearch
    .query(buildQueryParams())  // Your customised promise.
    .then(function (result) {}) // a new promise returned here.

所以_searchRequest最终成为一个全新的Promise实例。

documentation for deferred.then()谈到这个问题:

  

然后(successCallback,errorCallback,notifyCallback) - ...

     

此方法返回一个新的promise ,它通过successCallback的返回值解析或拒绝,errorCallback ...

(原文强调)