Я получаю неопределенную переменную в Ionic, и я не уверен, почему? - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь зашифровать и расшифровать простой текст в Ionic.Вот мой код:

encryptedData : any;

encryptData(data){
  this.aes
      .encrypt(this.secureKey, this.secureIV, data)
      .then(res => {
        console.log("Encrypted Data: " + res);
        this.encryptedData = res;
      })
      .catch(err => {
        console.log("Error encrypting data: " + err);
      });
 }

данные представляют собой простой простой текст, и они зашифрованы, как я вижу из журналов:

enter image description here

Однако переменная encryptedData становится нулевой после установки в нее данных (res).Что я могу делать не так?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Добро пожаловать в мир «this» в JavaScript.

Функции стрелок связаны с контекстом выполнения - в этом примере он будет вызываться с неким «this», исходящим из внутренних элементов Promise.

Вы можете принудительно вызвать контекст вызова, используя обычную функцию в сочетании с "bind (...)".

Пожалуйста, взгляните на следующий пример.

Promise
      .resolve("new value")
      .then((res) => {
        this.myProp = res;
      });

Не будет работать, но это:

Promise
    .resolve("new value")
    .then(function(res){
        this.myProp = res;
    }.bind(this));

будет.

Посмотрите на этот jsfiddle, который воспроизводит вашу проблему (откройте devtools браузера, чтобы увидеть вывод консоли) https://jsfiddle.net/mg7pjLz0/4/

0 голосов
/ 26 ноября 2018

Похоже, что encrypt () возвращает Promise;в таком случае вы можете использовать возвращаемое значение только внутри блока then.Вы должны проверить, возможно, выполнив console.log («Назначенные зашифрованные данные ?:» + this.encryptedData);сразу после назначения, если значение будет присвоено.Если значение напечатано, то, возможно, вы пытаетесь использовать значение до того, как вернется асинхронная функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...