【问题标题】:Making refresh token api call every 60 minutes每 60 分钟进行一次刷新令牌 API 调用
【发布时间】:2021-02-01 23:29:48
【问题描述】:

我目前在函数“refreshToken()”中有一个刷新令牌 api 调用,它没有显示在下面的代码中,但可以根据需要添加。在根组件的 componentDidMount 函数中,我调用 refreshToken() 的目的是每 60 分钟执行一次。不确定是否在此实例中使用 setInterval 或 setTimeout,因为我还将令牌存储在 localStorage 中。我还在使用 Spotify API 和他们的 OAuth,它们向我传递了刷新和访问令牌。我也意识到我需要本地存储中的令牌到期时间,因此计时器不会在页面重新加载时重置,那么我应该如何处理呢?以下是我目前拥有的代码。

App.js(根组件)

componentDidMount(){
    var now = new Date();
    var delay = 60 * 60 * 1000; // 1 hour in msec
    var start = delay - (now.getMinutes() * 60 + now.getSeconds()) * 1000 + now.getMilliseconds();

    setTimeout(function() {
      setTimeout(refreshToken(), delay);
    }, start);

    if (window.localStorage.getItem('spotifyAccessToken')){
      this.getSpotifyData();
    }
}

【问题讨论】:

    标签: javascript reactjs settimeout setinterval


    【解决方案1】:

    componentDidMount() 仅在组件挂载时执行一次 (mdn)。
    您必须使用setInterval() 定期安排它。

    并且不要忘记取消componentWillUnmount()中的计时器:

    componentDidMount(){
       var delay = 60 * 60 * 1000; // 1 hour in msec
    
       this.timer = setInterval(
         () => refreshToken(),
               delay,
       );
    }
    componentWillUnmount() {
        clearInterval(this.timer);
    }
    

    【讨论】:

    • 我刚刚使用您发送的代码意识到了这个问题,如果用户刷新页面,计时器将设置回 1。但令牌到期将保持从任何位置减少。我该如何解释呢?
    • 假设将 this.timer 存储在本地存储中?
    猜你喜欢
    • 2021-11-10
    • 2023-03-19
    • 2022-11-13
    • 2019-11-26
    • 2022-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多