nodeJS重新获取token的逻辑如何设计?

发布于 2022-09-02 01:56:15 字数 440 浏览 21 评论 0

假如我需要通过token获取用户信息,有这样一个函数:

function getUserInfo(token, onSuccess, onFail) {}

那么如果token失效,我就需要先重新获取token,然后重新获取用户函数,很可能要这么:

getUserInfo(token, onSuccess, onFail(err) {
    // if token fails
    getNewToken(onSuccess(tkn) {
        getUserInfo(tkn, onSuccess, onF);
    });
});

但是这样写,如果重新获取token失败,或者需要限制重新获取token的次数等,代码就会很乱很难组织,请问有没有更好的写法呢?了解过一点promise,但是不知道如何运用到这样的场景。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

茶花眉 2022-09-09 01:56:15

promise模式的实现,我目前是这么做的:

// 记录重复尝试获取Token的次数
var count = 0;

// 重复的最大次数限制
var limit = 3;

// 获取Token
function getToken() {
  return new Promise(...);
}

// 获取用户
function getUser() {
  return new Promise(function(resolve, reject) {
    if (token is invalid) {
      getToken().then(function() {
        resolve(getUser());
      }, function(rej) {
        // 重复尝试获取Token
        if (++count < limit) {
          resolve(getUser());
        }
        else {
          reject(rej);
        }
      });
    }
    
    count = 0;
    resolve(user)
  });
}

补充说明:如果你处于并发环境,count不能作为外部变量存在,只能放在上下文中,以免错误计数。

因为看清所以看轻 2022-09-09 01:56:15

大概类似于这样。不过这样会一直循环发送请求,貌似不太好……

const get = () => new Promise((resolve, reject) => {
    // 获取token的逻辑
    // 成功的话调用resolve
    // 失败的话调用reject
});

// 判断token是否获取成功,如果失败的话重新获取一次,不过这里会陷入循环?
const getToken = get().then(
    token => token
).catch(
    err => getToken()
)

getToken().then(token => {
    // 获得token要干的事情……
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文