Ionic 3存储问题在浏览器中不起作用

时间:2019-02-27 17:26:29

标签: ionic3 ionic-storage

好吧,我要扯掉我的头发(剩下的东西)。每当清除所有cookie /存储项目后从头开始启动应用程序时,我都会检查某些项...从而查看此人是否已登录该应用程序。

让他们通过firebase登录(成功)后,它返回到应用程序,然后在其中设置UID并获取用于API调用的google令牌。所有的值都已确认并已成功检索。

我们通过存储服务提供商设置这些设置。设置完这些后,我们尝试从API调用某些内容,这需要google令牌。当我们尝试从存储中检索它时,它不存在。但是,如果我只是在调试/应用程序选项卡中刷新浏览器(不清除cookie / etc),那么神奇的是存在localdb值,现在一切正常。

这是存储提供商:

@Injectable()
export class StorageProvider {
constructor(public http: HttpClient, public storage: Storage) {
console.log('Hello StorageProvider Provider');
}
public set(settingName,value):Promise<any>{

return this.storage.ready().then(() => {
  this.storage.set(`setting:${ settingName }`,value).then(() => {
    Promise.resolve(true);
  })
  .catch(err => {
    Promise.reject(err);
  })
})
.catch(err => {
  console.log("ERROR Storage Not Ready: " + err);

})
} public async get(settingName){
return this.storage.ready().then(() => { 
  this.storage.get(`setting:${ settingName }`).then((res) => {
      Promise.resolve(res);
  })
  .catch(err => {
    Promise.reject(err);
  })
})
.catch( err => {
  console.log("Storage Get Error");
  return Promise.reject(err);
}
);
}

有人可以看到我在做什么错吗?这是一个简短的代码片段,它总是在CMD + R之前返回No Token Set。一旦执行CMD + R,一切都将存在,并且一切都将正常工作。

await this.storage.get('Token').then((results) => {
  this.token = results;
})

if(this.token == null)
{
  return Promise.reject("No Token Set");
}

1 个答案:

答案 0 :(得分:1)

尝试:

this.token = await this.storage.get(‘Token’);

不是在异步方法中使用await的方式。

也很不错:https://www.joshmorony.com/using-asyncawait-syntax-for-promises-in-ionic/