使用Angular的IONIC中的JWT

qyyhg6bp  于 2023-09-28  发布在  Ionic
关注(0)|答案(1)|浏览(146)

当我导航到我的IONIC应用程序中的另一个页面时,API调用(GET)不按预期工作,他们需要一个令牌进行授权,但在我第一次导航到该页面时,storage.get没有及时获得令牌。如果然后我回到主页,并再次返回,它的工作按计划进行。

ngOnInit(){
   this.storage.get('token')
    .then (result => this.token = result)
  }

  ionViewWillEnter(){
    this.loadData()
  }

  async loadData(){
    await this.getNotifications();
  }

使用控制台日志,我看到第一次导航到该页面时令牌是空的。似乎storage.get花费了太多时间,并且在我获得令牌之前执行了API调用。我试着用async await设置ngOnInit,但没有成功。

khbbv19g

khbbv19g1#

看起来您面临着在进行API调用之前从存储中获取令牌的时间问题。由于storage.get方法是异步的,因此有可能在检索令牌之前执行API调用。这里有一个可能的解决方案,以确保在进行API调用之前获取令牌:

ngOnInit() {
  this.fetchTokenAndLoadData();
}

async fetchTokenAndLoadData() {
  try {
    this.token = await this.storage.get('token');
    if (this.token) {
      await this.loadData();
    } else {
      console.log('Token not found');
    }
  } catch (error) {
    console.error('Error fetching token:', error);
  }
}

async loadData() {
  try {
    await this.getNotifications();
  } catch (error) {
    console.error('Error loading data:', error);
  }
}

通过使用async/await语法,可以确保在尝试加载数据之前获取令牌。如果令牌检索由于任何原因失败,您可以适当地处理该错误。这样,您将不会进行API调用,直到您有一个有效的令牌。

相关问题