2015-09-28 2 views
-1

Я пытаюсь добавить функцию прерывания в свое обещание в Угловом. При отладке кода я вижу, что функция добавляется как ожидалось. Однако, когда объект возвращается вызывающей службе, функция больше не существует. Я надеюсь, что это нечто тривиальное.Функция удаляется из объекта во время возврата

.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

Каждый раз, когда вы приковать обещание с then, catch или finally вы получите новое обещание назад:

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

_searchRequest Так заканчивает тем, что свежий новый экземпляр Promise.

В documentation for deferred.then() говорит об этом:

затем (successCallback, errorCallback, notifyCallback) - ...

Этот метод возвращает новое обещание которое разрешенное или отвергнут с помощью возвращаемого значения successCallback, errorCallback ...

(Выделено в оригинале)

+0

(лицевая ладонь) вы, конечно, правы. –

Смежные вопросы