Ошибка успеха не является функцией в 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
Надеюсь, это имеет смысл.