Ошибка успеха не является функцией в Angularjs

Я столкнулся с проблемой с моим кодом, я не могу понять, что с ним происходит. Интересные вещи - это то, что api вызывает неплохую, но не orders.pay(ss($scope.ss, $scope.oo)).success(function (data) { success функции orders.pay(ss($scope.ss, $scope.oo)).success(function (data) {

angular.module('services.orders', ['users.service'])
  .factory('orders', ['$http', 'user', '$q', function ($http, user, $q) {
    'use strict';

function genericSuccess (res) {
      return res.data.data; // yes, really.
    }


function pay (payment) {
      return $http.post('v1/payment/authorize', payment)
        .then(genericSuccess);
    }



orders.pay(ss($scope.ss, $scope.oo))
          .success(function (data) {

    //It should called success either it should gone to error but it says
    //Error:orders.pay(...).success is not a function
    //can any one suggest how to solve it

            notify.message('Thank you!');
          }).error(function (data) {
          notify.message('Error: ' + data.data.message);
        });

Ответ 1

function genericSuccess (res) {
  return res.data.data; // yes, really.
}

function pay (payment) {
  return $http.post('v1/payment/authorize', payment).then(function(success) {
    return genericSuccess(success);
  });
}

Попробуй, посмотри, лучше ли это?

Ответ 2

Как вы можете видеть в угловой документации https://docs.angularjs.org/api/ng/service/$http

success и error больше недоступны. Если вы все еще хотите использовать .success и .error в своем коде, вы можете сделать что-то вроде этого:

angular.module('services.orders', ['users.service'])
  .factory('orders', ['$http', 'user', '$q', function ($http, user, $q) {
    'use strict';

    function genericSuccess(res) {
      return res.data.data; // yes, really.
    }


    function pay(payment) {
      var successCallback, errorCallback;
      function successFn(callback) {
        if (typeof callback == 'function'){
          successCallback = callback;
        }

        return successErrorResponse;
      }

      function errorFn(callback) {
        if (typeof callback == 'function') {
          errorCallback = callback;
        }

        return successErrorResponse;
      }

      var successErrorResponse = {
        success: successFn,
        error: errorFn
      };


      $http.post('v1/payment/authorize', payment)
        .then(
          function (response) {
            if(successCallback) {
              successCallback(response)
            }
          },
          function (response) {
            if(errorCallback) {
              errorCallback(response)
            }
          });




      return successErrorResponse;


    }


    orders.pay(ss($scope.ss, $scope.oo))
      .success(function (data) {

        //It should called success either it should gone to error but it says
        //Error:orders.pay(...).success is not a function
        //can any one suggest how to solve it

        notify.message('Thank you!');
      }).error(function (data) {
      notify.message('Error: ' + data.data.message);
    });

  }])

но вы действительно должны принять новый угловой апи.

Ответ 3

Проблема, с которой вы .success заключается в том, что .success и .error - это оболочка, абстракция, которую предоставляет только объект $http, а не основной объект обещания.

Проблема заключается в том, что обещание, возвращенное из $http, распространяется на эти дополнительные свойства, однако последующих обещаний нет. Ваш первый. .then в вашем сервисе возвращается нормальное обещание, которое не имеет метода .success.

Это одна из причин, по которой она устарела, вместо этого вы должны использовать .then и .catch.

Так что это сработает:

$http.get().success().then();

но это не будет:

$http.get().then().success();

но вместо этого вы действительно должны делать:

$http.get().then().then();

См. Следующий скрипт, который будет демонстрацией его. Fiddle

Надеюсь, это имеет смысл.