我在Ionic中得到一个未定义的变量,我不确定为什么吗?

时间:2018-11-26 13:42:34

标签: javascript typescript ionic-framework ionic3

我正在尝试加密和解密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

但是,在将变量[res]设置为变量后,变量 encryptedData 为空。我可能做错了什么?

2 个答案:

答案 0 :(得分:2)

欢迎来到JavaScript中的“ this”世界。

箭头功能绑定到执行上下文-在此示例中,将使用Promise内部提供的某种“ this”来调用它。

您可以通过将常规函数与“ 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/

答案 1 :(得分:0)

好像crypto()返回一个Promise;在这种情况下,您只能使用'then'块内的返回值。您应该通过console.log(“ Encrypted Data Assigned ?:” + this.encryptedData);进行检查。如果分配了值,则在分配后立即执行。如果已打印该值,则可能您正在尝试在异步函数返回之前使用该值。