Javascript I';mg在爱奥尼亚和I';我不知道为什么?
我正在尝试用Ionic加密和解密一个简单的文本。这是我的密码: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; })
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块中起作用,但仍然不起作用,我正在尝试读取承诺代码块下面的变量。承诺是异步执行的。您正在尝试在此之前访问属性(…)代码块已运行。仍然不工作,我正在尝试读取承诺代码块下面的变量。承诺是异步执行的。您正在尝试在运行(…)代码块之前访问属性。