【问题标题】:I'mg getting an undefined variable in Ionic and I'm not sure why?我在 Ionic 中得到了一个未定义的变量,但我不确定为什么?
【发布时间】:2018-11-27 05:11:06
【问题描述】:

我正在尝试在 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);
      });
 }

数据是一个简单的纯文本,我可以从日志中看到它被加密:

但是,变量 encryptedData 在将(res)数据设置为它之后变为空。我可能做错了什么?

【问题讨论】:

  • 您在哪里尝试读取encryptedData 的值?在promise完成后它会有一个值only(所以如果你试图在catch下面做它不会起作用。
  • 是的,我正在尝试在 catch 方法下方阅读此内容,我注意到它仅在 then 块内有效

标签: javascript typescript ionic-framework ionic3


【解决方案1】:

欢迎来到 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/

【讨论】:

  • 还是不行,我正在尝试读取 Promise 代码块下方的变量
  • 好吧,promise 是异步执行的。您甚至在 then(...) 代码块运行之前尝试访问属性。
【解决方案2】:

看起来 encrypt() 返回了一个 Promise;在这种情况下,您只能在“then”块中使用返回值。您应该检查一下,也许通过执行 console.log("Encrypted Data Assigned?: " + this.encryptedData);如果值被分配,则在您分配之后。如果打印了该值,那么您可能正在尝试在异步函数返回之前使用该值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 2015-08-21
    相关资源
    最近更新 更多