Не удалось вызвать внешнюю функцию из обратного вызова обработчика ответа болта - PullRequest
0 голосов
/ 25 апреля 2020

Я не смог вызвать метод Update из болта responseHandler: Пожалуйста, помогите мне в этом вопросе.

Angular 9:

Ошибка: ядро. js: 1673 ОШИБКА TypeError: this.updatePaymentInfo не является функцией в 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);
    }

1 Ответ

1 голос
/ 25 апреля 2020

Если вы пытаетесь получить доступ к значению вне области действия внутренней функции, вам следует использовать функции стрелок. Вместо:

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 будет относиться к самой анонимной функции вместо того, чтобы ссылаться на класс, в котором он сейчас находится.

Если по какой-либо причине вы используете 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;
    }
...
...