拦截 $http 响应并传回全新的全新响应
Intercepting $http responses and passing back new brand new responses
我正在创建一个必须支持多个支付网关的电子商务商店。这些支付网关之一包括澳大利亚国民银行,它不包括与 HTTP 代码和 JSON 通信的 API。相反,它仅以文本和状态 200 响应,即使交易失败也是如此。
在我的应用程序中,我使用 $http 提供程序来处理这些响应,但它总是会触发成功函数,因此我需要以某种方式拦截响应,然后再决定它是成功还是失败。
设置方法如下:
// 控制器
PaymentService.submit(payment_info).then(function(resp){
// Do stuff on success
})
// 支付服务#submit
payment.submit = function(data) {
var strategy;
// general payment codez
if (CURRENT_COUNTRY == 'au') {
strategy = PaymentStrategy.nab.submit(card.number, card.cvv, card.exp_year, card.exp_month);
}
return strategy;
}
// PaymentStrategy.nab#提交
service.submit = function(number, cvv, exp_year, exp_month) {
// payment codez specific to NAB
return $http.post(resource_path, $httpParamSerializerJQLike(payload), { headers: headers })
}
所以问题是 PaymentService.submit 是从 PaymentStrategy.nab 传回的承诺。然而,该承诺将始终触发成功回调,因为即使付款失败,响应也始终为 200(这是澳大利亚国民银行当前系统的工作原理。它应该使用 HTML 表单提交)。
我希望 PaymentService.submit 方法适用于任何支付网关 - 所以我需要传回的承诺始终表现相同。唯一应该出现这些类型的独特配置的地方是在它们自己的策略中。
综上所述,我怎样才能从 NAB 获得响应,使该响应正常化,然后沿着链返回另一个正确的响应?
要将成功的承诺转换为拒绝的承诺,在成功处理程序中抛出一个值。要将拒绝的承诺转换为成功的承诺,return 一个值到 .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;
});
承诺的 .then
方法 return 是一个 new 承诺,解决了 returned 的内容(或被拒绝的内容抛出)。
了解更多信息
我正在创建一个必须支持多个支付网关的电子商务商店。这些支付网关之一包括澳大利亚国民银行,它不包括与 HTTP 代码和 JSON 通信的 API。相反,它仅以文本和状态 200 响应,即使交易失败也是如此。
在我的应用程序中,我使用 $http 提供程序来处理这些响应,但它总是会触发成功函数,因此我需要以某种方式拦截响应,然后再决定它是成功还是失败。
设置方法如下:
// 控制器
PaymentService.submit(payment_info).then(function(resp){
// Do stuff on success
})
// 支付服务#submit
payment.submit = function(data) {
var strategy;
// general payment codez
if (CURRENT_COUNTRY == 'au') {
strategy = PaymentStrategy.nab.submit(card.number, card.cvv, card.exp_year, card.exp_month);
}
return strategy;
}
// PaymentStrategy.nab#提交
service.submit = function(number, cvv, exp_year, exp_month) {
// payment codez specific to NAB
return $http.post(resource_path, $httpParamSerializerJQLike(payload), { headers: headers })
}
所以问题是 PaymentService.submit 是从 PaymentStrategy.nab 传回的承诺。然而,该承诺将始终触发成功回调,因为即使付款失败,响应也始终为 200(这是澳大利亚国民银行当前系统的工作原理。它应该使用 HTML 表单提交)。
我希望 PaymentService.submit 方法适用于任何支付网关 - 所以我需要传回的承诺始终表现相同。唯一应该出现这些类型的独特配置的地方是在它们自己的策略中。
综上所述,我怎样才能从 NAB 获得响应,使该响应正常化,然后沿着链返回另一个正确的响应?
要将成功的承诺转换为拒绝的承诺,在成功处理程序中抛出一个值。要将拒绝的承诺转换为成功的承诺,return 一个值到 .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;
});
承诺的 .then
方法 return 是一个 new 承诺,解决了 returned 的内容(或被拒绝的内容抛出)。
了解更多信息