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

假如我需要通过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,但是不知道如何运用到这样的场景。

阅读 7.5k
2 个回答

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不能作为外部变量存在,只能放在上下文中,以免错误计数。

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

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

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

getToken().then(token => {
    // 获得token要干的事情……
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题