错误成功不是Angularjs中的函数

Jim*_*mmy 12 angularjs

我遇到了我的代码问题,我无法理解它是否出错了.有趣的是,api调用的很好,但它没有进入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);
        });
Run Code Online (Sandbox Code Playgroud)

rrd*_*rrd 18

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);
  });
}
Run Code Online (Sandbox Code Playgroud)

试试看,那是否更好?


Dan*_*ele 13

正如你在角度文档中看到的那样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);
    });

  }])
Run Code Online (Sandbox Code Playgroud)

但你真的应该采用新的角度api.


ste*_*425 5

你会碰到的问题是事实,.success并且.error是一个包装,一个抽象的,只有$http自曝,不是核心的承诺目标.

问题是从返回的承诺$http扩展到具有这些额外的属性,但后续的承诺不是.您的第一个.then服务是返回一个没有.success方法的正常承诺.

这是它被弃用的原因之一,你应该使用.then和.catch.

所以这将有效:

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

但这不会:

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

但你应该真的这样做:

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

请看下面的小提琴,它将演示它的小提琴

希望有道理.