我正在尝试加密和解密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);
});
}
数据是简单的纯文本,并且从日志中可以看到它被加密:
但是,在将变量[res]设置为变量后,变量 encryptedData 为空。我可能做错了什么?
答案 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);进行检查。如果分配了值,则在分配后立即执行。如果已打印该值,则可能您正在尝试在异步函数返回之前使用该值。