node.js - nodeJS重新获取token的逻辑如何设计?
阿神
阿神 2017-04-17 13:23:42
[Node.js讨论组]

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

阿神
阿神

闭关修行中......

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

ringa_lee

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

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

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

getToken().then(token => {
    // 获得token要干的事情……
});
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号