无法从螺栓响应处理程序回调调用外部函数

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