Javascript I';mg在爱奥尼亚和I';我不知道为什么?

Javascript I';mg在爱奥尼亚和I';我不知道为什么?,javascript,typescript,ionic-framework,ionic3,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; })

我正在尝试用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)数据后为空。我可能做错了什么?

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

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

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

Arrow函数绑定到执行上下文——在本例中,将使用来自Promise内部的某种“this”来调用它

您可以通过结合使用常规函数和“bind(…)”来强制调用上下文

请看下面的例子

Promise
      .resolve("new value")
      .then((res) => {
        this.myProp = res;
      });
不起作用,但这:

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

看看这个JSFIDLE,它再现了您的问题(打开浏览器的devtools查看控制台输出)

欢迎来到JavaScript的“this”世界

Arrow函数绑定到执行上下文——在本例中,将使用来自Promise内部的某种“this”来调用它

您可以通过结合使用常规函数和“bind(…)”来强制调用上下文

请看下面的例子

Promise
      .resolve("new value")
      .then((res) => {
        this.myProp = res;
      });
不起作用,但这:

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

看看这个JSFIDLE,它再现了您的问题(打开浏览器的devtools查看控制台输出)

您试图在哪里读取
encryptedData
的值?它只有在承诺完成后才会有值(因此,如果您尝试在捕获下执行,它将不起作用。是的,我正在尝试在捕获方法下阅读此内容,我注意到它只在then块中起作用。您在哪里尝试读取
encryptedData
的值?它只有在承诺完成后才会有值(因此,如果您尝试在catch下面执行此操作,它将不起作用。是的,我正在尝试在catch方法下面读取此内容,我注意到它只在then块中起作用,但仍然不起作用,我正在尝试读取承诺代码块下面的变量。承诺是异步执行的。您正在尝试在此之前访问属性(…)代码块已运行。仍然不工作,我正在尝试读取承诺代码块下面的变量。承诺是异步执行的。您正在尝试在运行(…)代码块之前访问属性。