无法从螺栓响应处理程序回调调用外部函数
Could not call outside function from bolt Response Handler Callback
我无法从 bolt responseHandler: 调用我的 Update 方法,请帮助我解决这个问题。
Angular 9:
Error: core.js:1673 ERROR TypeError: this.updatePaymentInfo is not a
function at Object.responseHandler
updatePaymentInfo()在同一个ts文件中声明。
请找到以下代码:
var RequestData={
key: paymentRequest.key,
txnid: paymentRequest.txnId,
hash: paymentRequest.hash,
amount: paymentRequest.amount,
firstname: paymentRequest.firstName,
email: paymentRequest.email,
phone: paymentRequest.phone,
productinfo: paymentRequest.productInfo,
udf1: paymentRequest.udf1,
surl: paymentRequest.sUrl,
furl: paymentRequest.fUrl
}
var Handlers={
responseHandler: function(BOLT) {
if (BOLT.response.txnStatus != "CANCEL") {
this.updatePaymentInfo(BOLT.response);
}
else {
alert(BOLT.response);
}
return BOLT.response;
},
catchException: function(BOLT) {
alert(BOLT.message);
}
}
launchBOLT(paymentRequest) {
bolt.launch(RequestData,Handlers);
}
如果您试图访问内部函数范围之外的值,您应该使用箭头函数。而不是:
responseHandler: function(BOLT) {
if (BOLT.response.txnStatus != "CANCEL") {
this.updatePaymentInfo(BOLT.response);
} else { alert(BOLT.response); }
return BOLT.response;
}
...
使用箭头函数,以便您可以访问外部范围 this
对象:
responseHandler: (BOLT) => {
if (BOLT.response.txnStatus != "CANCEL") {
this.updatePaymentInfo(BOLT.response);
} else { alert(BOLT.response); }
return BOLT.response;
}
...
否则,this
将引用匿名函数本身,而不是引用它当前所在的 class。
如果您使用的是 ECMAScript 3 或更早版本,则必须先将 this
保存在变量中,然后再在您的函数中使用它,因为箭头函数在这些版本中不存在(正如我们所说的 Angular 9,我认为情况几乎不会如此):
var _this = this;
var Handlers = {
responseHandler: function(BOLT) {
if (BOLT.response.txnStatus != "CANCEL") {
_this.updatePaymentInfo(BOLT.response);
} else { alert(BOLT.response); }
return BOLT.response;
}
...
我无法从 bolt responseHandler: 调用我的 Update 方法,请帮助我解决这个问题。
Angular 9:
Error: core.js:1673 ERROR TypeError: this.updatePaymentInfo is not a function at Object.responseHandler
updatePaymentInfo()在同一个ts文件中声明。
请找到以下代码:
var RequestData={
key: paymentRequest.key,
txnid: paymentRequest.txnId,
hash: paymentRequest.hash,
amount: paymentRequest.amount,
firstname: paymentRequest.firstName,
email: paymentRequest.email,
phone: paymentRequest.phone,
productinfo: paymentRequest.productInfo,
udf1: paymentRequest.udf1,
surl: paymentRequest.sUrl,
furl: paymentRequest.fUrl
}
var Handlers={
responseHandler: function(BOLT) {
if (BOLT.response.txnStatus != "CANCEL") {
this.updatePaymentInfo(BOLT.response);
}
else {
alert(BOLT.response);
}
return BOLT.response;
},
catchException: function(BOLT) {
alert(BOLT.message);
}
}
launchBOLT(paymentRequest) {
bolt.launch(RequestData,Handlers);
}
如果您试图访问内部函数范围之外的值,您应该使用箭头函数。而不是:
responseHandler: function(BOLT) {
if (BOLT.response.txnStatus != "CANCEL") {
this.updatePaymentInfo(BOLT.response);
} else { alert(BOLT.response); }
return BOLT.response;
}
...
使用箭头函数,以便您可以访问外部范围 this
对象:
responseHandler: (BOLT) => {
if (BOLT.response.txnStatus != "CANCEL") {
this.updatePaymentInfo(BOLT.response);
} else { alert(BOLT.response); }
return BOLT.response;
}
...
否则,this
将引用匿名函数本身,而不是引用它当前所在的 class。
如果您使用的是 ECMAScript 3 或更早版本,则必须先将 this
保存在变量中,然后再在您的函数中使用它,因为箭头函数在这些版本中不存在(正如我们所说的 Angular 9,我认为情况几乎不会如此):
var _this = this;
var Handlers = {
responseHandler: function(BOLT) {
if (BOLT.response.txnStatus != "CANCEL") {
_this.updatePaymentInfo(BOLT.response);
} else { alert(BOLT.response); }
return BOLT.response;
}
...