Angularjs 拦截$http响应并传回新的响应

Angularjs 拦截$http响应并传回新的响应,angularjs,angular-http,angular-http-interceptors,Angularjs,Angular Http,Angular Http Interceptors,我正在创建一个电子商务商店,它必须支持多个支付网关。其中一个支付网关包括澳大利亚国家银行(National Australian Bank),该银行不包括与HTTP代码和JSON通信的API。相反,即使事务失败,它也只响应文本和状态200 在我的应用程序中,我使用$http提供程序来处理这些响应,但它总是会启动success函数,因此在决定响应是成功还是失败之前,我需要以某种方式拦截响应 以下是它的设置方式: //控制器 PaymentService.submit(payment_info).t

我正在创建一个电子商务商店,它必须支持多个支付网关。其中一个支付网关包括澳大利亚国家银行(National Australian Bank),该银行不包括与HTTP代码和JSON通信的API。相反,即使事务失败,它也只响应文本和状态200

在我的应用程序中,我使用$http提供程序来处理这些响应,但它总是会启动success函数,因此在决定响应是成功还是失败之前,我需要以某种方式拦截响应

以下是它的设置方式:

//控制器

PaymentService.submit(payment_info).then(function(resp){
  // Do stuff on success
})
//支付服务#提交

//PaymentStrategy.nab#提交

所以问题在于PaymentService.submit是从PaymentStrategy.nab传递回来的承诺。然而,这个承诺总是会触发成功回调,因为即使支付失败,响应也总是200(这是house National Australian Bank当前的系统工作原理。它应该与HTML表单一起提交)

我希望PaymentService.submit方法适用于任何支付网关-因此我需要传递回始终保持相同行为的承诺。这些独特的配置应该出现在它们自己的策略中


话虽如此,我如何从NAB获得响应,使该响应正常化,然后再返回另一个正确的响应返回链?

要将成功的承诺转换为被拒绝的承诺,请在成功处理程序中抛出一个值。要将拒绝的承诺转换为成功的承诺,请向
.catch
处理程序返回一个值

return $http.get(url).then(function(response) {
    if (response.data.transactionFailed) {
        //THROW to convert to rejection;
        throw response;
    };
    //OTHERWISE return to chain response
    return response;
});
promise的
。然后
方法返回一个新的promise,该promise解析为返回的内容(或被抛出的内容拒绝)

更多信息


要将成功的承诺转换为被拒绝的承诺,请在成功处理程序中抛出一个值。要将拒绝的承诺转换为成功的承诺,请向
.catch
处理程序返回一个值。看到了,谢谢。是这个男人(或女人)!非常感谢。重点放在“the”。
service.submit = function(number, cvv, exp_year, exp_month) {

  // payment codez specific to NAB

  return $http.post(resource_path, $httpParamSerializerJQLike(payload), { headers: headers })
}
return $http.get(url).then(function(response) {
    if (response.data.transactionFailed) {
        //THROW to convert to rejection;
        throw response;
    };
    //OTHERWISE return to chain response
    return response;
});