为何每次请求,都要去登录一下呢?
this.getToken(param, requestId, page).then(() => {}
这样做是为什么?
this.getToken(param, requestId, page).then(() => {}
这样做是为什么?
getToken内部会做判断,满足条件时才会真正调用登录接口
之所以这样设计,是因为我接触的小程序,大部分是进入首页后调用登录接口获取一个token,以后调用接口时都将这个token放在请求头中
这种场景会遇到一些问题。比如登录接口比较慢,未登录成功,用户点击了别的按钮触发了一个请求,而这个请求又是需要携带token的。这时如果不做处理,服务器收到没有token的请求就会报错了。 1、要么加蒙层,登录未成功之前不让用户点击,但是加蒙层也挡不住用户切换下面的tabbar(除非tabbar也是自定义的)。就算用小程序自带的模态对话框也是可以手动关闭的 2、要么所有事件做判断,没有登录成功就点击无效,这挺麻烦的
所以每次都去getToken内部判断一下,就不用担心上面的场景。假如我发起 a 请求是需要携带token的,getToken 内部会判断之前有没有登录过,登录过则携带 token 发起请求,没有登录过则会先发起登录请求获得 token 再发起 a 请求。之后我再发起 b 请求,此时 a 请求已经登录过了,所以 b 请求会携带之前的 token 。其实就是连续发起多个需要 token 的请求,也只有第一个会触发登录接口。
也可以把接口的参数 whiteList 为 true,表示这个接口不需要 token,getToken内部会判断,就算之前没有token也不会触发登录
我看没有什么判断呀,然后执行每次登录么
有几个判断都是return返回的,比如你截图的241行