我尝试使用Ionic Storage模块存储一些值,例如我的身份验证令牌:
/**
* Get Token
*/
public get token(): string {
this.storage.get(this.LS_TOKEN).then((val) => {
console.log(val);
this._token.next(val);
console.log( this._token.getValue());
});
return this._token.getValue();
// return 'testtttt';
}
我尝试了多种操作,直接返回值,设置值并返回变量...
但是我总是得到一个null
,奇怪的是,如果我直接返回一个字符串,它会起作用,当我console.log
val
时,它会显示我想要的字符串,但是返回始终为空。.
我在做什么错了?
编辑:
响应第一个答案,我已经尝试过:
/**
* Get Token
*/
public get token() {
this.tokenPromise().then(yourToken => {
console.log(yourToken);
return yourToken;
});
}
public tokenPromise() {
return new Promise((resolve, reject) => {
this.storage.get(this.LS_TOKEN).then((val) => {
resolve(val);
}).catch(ex => {
reject(ex);
});
});
}
我的问题是一样的,当我尝试使用以下组件时:console.log(this.sharedService.token);
它仍然为空
答案 0 :(得分:0)
您正在从storage.get()方法获得一个Promise。 这意味着它正在异步运行。 您可以返回Promise。
public get token() {
return new Promise((resolve, reject)=>{
this.storage.get(this.LS_TOKEN).then((val) => {
resolve(val);
}).catch(ex=>{
reject(ex);
});
});
}
您可以通过异步函数接收此消息并等待结果:
async loadToken(){
let loadedToken = await this.token();
// use your loadedToken here...
}
或者您可以像这样从诺言中使用.then方法:
loadToken(){
this.token().then(yourToken=>{
// use the token yourToken here...
});
}
答案 1 :(得分:0)
它不适用于您的新token()方法。 现在仍然不同步。我要告诉你:
public get token() {
return new Promise((resolve, reject)=>{
this.storage.get(this.LS_TOKEN).then((val) => {
resolve(val);
}).catch(ex=>{
reject(ex);
});
});
}
现在,您可以像下面这样使用来自共享服务的令牌:
this.sharedService.token.then(token=>{
//use token here;
});
或者您可以使用await,但是调用它的函数必须异步:
async useTokenFromService(){
let token = await this.sharedService.token;
console.log(token);
}