Angularjs $http delete с обещанием $q приводит к TypeError: объект не является функцией

Следующий фрагмент кода возвращает следующую ошибку: TypeError: object is not a function

service.deleteItem = function(itemId) {
    var def = $q.defer();
    $http.delete(SERVER_REST_PATH + '/items/' + itemId)
        .success(function() {
            def.resolve();
        }).error(function(data, status) {
            def.reject("Error deleting the item");
        });
    return def.promise();
};

Если я переписываю это следующим образом, это работает:

service.deleteItem = function(itemId) {
    return $http.delete(SERVER_REST_PATH + '/items/' + itemId);
};

Все другие методы $http, которые я использую (например, GET, PUT, POST) в моем приложении, заключаются в $q таким же образом, и у них нет этой проблемы. Только УДАЛЕНИЕ вызывает эту проблему. Когда я отлаживаю его, он просто пропускает методы $http success(), error() и then(). Я использую угловую версию 1.3.13.

1 ответ

Решение

Менять return def.promise(); в return def.promise;

пример:

function deferredTimer(success) {
  var deferred = $q.defer();

  $timeout(function() {
    if (success) {
      deferred.resolve({ message: "This is great!" });
    } else {
      deferred.reject({ message: "Really bad" });
    }
  }, 1000);

  return deferred.promise;
}
Другие вопросы по тегам