Ionic2 - 设置和检索存储的值失败

时间:2017-02-12 08:08:34

标签: angular typescript ionic2

我正在设置离子存储的值。但是,我无法检索它。

这就是我所做的

在我的登录服务中

@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浏览器。

1 个答案:

答案 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));
    }
  })
}

API文档:https://ionicframework.com/docs/v2/storage/