我正在设置离子存储的值。但是,我无法检索它。
这就是我所做的
在我的登录服务中
@Injectable()
export class Authservice {
storage: Storage;
login(user: UserModel): Observable<any> {
return this._http.post(this.loginurl + "mobile-login", body)
.map((response: Response) => {
let token = response.json().access_token;
if (token) {
console.log(token) //this returns a value of the token
this.storage.set('token', token);
this.storage.get('token').then((val) => {
console.log("token value now is"+val); //this returns nothing
})
} else {
// return false to indicate failed login
return false;
}
})
//.catch(this.handleError);
}
另外在我尝试的其他服务中
this._storage.get('token')
.then(res=>{
console.log("in the other area token is"+res)//this is null
}
);
我尝试在像
这样的构造函数中检索值authtoken:string;
constructor(private http: Http, private _storage:Storage) {
this._storage.get('token')
.then(res=>{
this.authtoken= res;
}
);
}
然后在我试过的组件
中console.log(this.authtoken) //still nothing
在我的app模块中,我还添加了
providers[Storage]
可能是什么问题。我正在测试Chrome浏览器。
答案 0 :(得分:1)
这是因为storage.set
返回了一个承诺,它不是一个同步过程。
因此,当您立即致电storage.get
时,令牌尚未完全保存到存储空间,您什么也得不到。
当存储集成功时,您可以创建公共事件。
import { BehaviourSubject, Subject } from 'rxjs';
tokenEvent: Subject = new BehaviourSubject(null);
...
this.storage.set('token', token).then(res => this.tokenEvent.next(true));
在其他组成部分:
constructor(private auth: Authservice){}
ngOnInit() {
this.auth.tokenEvent.subscribe(res => {
if (res) {
this.this.storage.get('token')
.then(token => console.log(token));
}
})
}