2016-04-11 6 views
11

ich ein Problem mit meinem Code bin vor mir, was los ist falsch an kann es nicht verstehen .. interessante Dinge sind, dass api recht gut ruft aber es ist nicht in success Funktion geht orders.pay(ss($scope.ss, $scope.oo)) .success(function (data) {Fehler Erfolg keine Funktion in AngularJS ist

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); 
     }); 
+0

Wie sieht die 'orders'-Funktion aus? Posten Sie es, wenn Sie können. – mtndesign

+2

'.success' und' .error' sind veraltet, auch wenn dies nicht die Ursache Ihres Problems ist, sollten Sie sie trotzdem vermeiden. Verwenden Sie stattdessen ".then" und ".catch". – ste2425

Antwort

15
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); 
    }); 
} 

bereite, zu sehen, ob das besser ist?

5

Das Problem in Ihrem Lauf ist die Tatsache, dass .success und .error ist ein Wrapper, eine Abstraktion, die nur die $http aussetzt, nicht der Kern Versprechen Objekt.

Das Problem ist das Versprechen von $http zurückgegeben wird erweitert, um diese zusätzlichen Eigenschaften haben, aber nachfolgende Versprechen sind nicht. Ihre erste .then in Ihrem Service gibt ein normales Versprechen zurück, das keine .success Methode hat.

Dies ist einer der Gründe, warum es veraltet ist. Stattdessen sollten Sie .then und .catch verwenden.

So wird diese Arbeit:

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

aber diese werden nicht:

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

sondern sollten Sie tun wirklich:

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

Sehen Sie die folgende Geige, die es vorführt Fiddle

Hoffnung, die Sinn ergibt.

11

Wie Sie in dem Winkel Dokumentation https://docs.angularjs.org/api/ng/service/$http

success und error sind nicht mehr verfügbar sehen. Wenn Sie noch .success und .error in Ihrem Code verwenden mögen Sie etwas tun können:

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); 
    }); 

    }]) 

aber Sie sollten wirklich den neuen Winkel api verabschieden.

+0

Hallo Daniele können Sie diese Frage beantworten: https://stackoverflow.com/questions/44369082/excel-download-is-not-working-in-mean-stack-app/44373532#44373532 – Vinoth

+0

Ich frage mich, ob sie andere haben bestimmte Gründe, diese Funktionen umzubenennen, außer sie einfach umzubenennen. –

Verwandte Themen