【小程序】小程序无痛刷新token

小程序无痛刷新token

SeaBoat发布于 23 分钟前

// 封装一个http 方法

let temp_request = [], is_freshing = false;

/**

* @param {string} url

* @param {string} method

* @param {Object} data

* @param {Boolean} loading

*/

const http = function(url, method, data, loading) {

let params_ = arguments

return new Promise((resolve, reject) => {

if(loading) {

uni.showToast({

title: '加载中',

icon: 'loading',

duration: 10000,

// mask: true

})

}

data.token = uni.getStorageSync('api_token')

uni.request({

url: url,

method,

data,

success(res) {

if(loading){

uni.hideToast({

title: '加载中',

icon: 'loading',

duration: 10000,

})

}

let code = res.data.code

switch (code) {

case 0: resolve(res.data.data);break;

case 200:

// other handlers

break

case 401:

// token 过期

if(!is_freshing) {

refresh()

}

// 关键步骤~~~~

resolve(new Promise(reslove => {

temp_request.push(() => {

reslove(request(...params_))

})

}))

break;

default:

reject(res.data.data)

}

},

fail(error) {

reject(error.data.data)

},

complete(res) {

}

})

})

}

function refresh() {

is_freshing = true

// 这里用的uni-app 获取微信code, 原生微信小程序 wx.login()

uni.login({

provider: 'weixin',

success: function (loginRes) {

http('/mob/auth/login/miniProgram', 'post', {code}, true)

.then((res) => {

uni.setStorageSync('api_token', res.token)

is_freshing = false

temp_request.map(cb => cb())

// 清空temp_request

temp_request = []

})

.catch((res) => {

uni.hideLoading();

})

}

});

}, 1500)

}

export default http

// 测试

onShow() {

// 在token过期的情况下,派发三个需要token的请求

http({url1, 'get'})

.then((res) => {

console.log(res)

})

http({url1, 'get'})

.then((res) => {

console.log(res)

})

http({url1, 'get'})

.then((res) => {

console.log(res)

})

}

小程序

阅读 16更新于 21 分钟前

本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议

avatar

SeaBoat

3 声望

0 粉丝

0 条评论

得票时间

avatar

SeaBoat

3 声望

0 粉丝

宣传栏

// 封装一个http 方法

let temp_request = [], is_freshing = false;

/**

* @param {string} url

* @param {string} method

* @param {Object} data

* @param {Boolean} loading

*/

const http = function(url, method, data, loading) {

let params_ = arguments

return new Promise((resolve, reject) => {

if(loading) {

uni.showToast({

title: '加载中',

icon: 'loading',

duration: 10000,

// mask: true

})

}

data.token = uni.getStorageSync('api_token')

uni.request({

url: url,

method,

data,

success(res) {

if(loading){

uni.hideToast({

title: '加载中',

icon: 'loading',

duration: 10000,

})

}

let code = res.data.code

switch (code) {

case 0: resolve(res.data.data);break;

case 200:

// other handlers

break

case 401:

// token 过期

if(!is_freshing) {

refresh()

}

// 关键步骤~~~~

resolve(new Promise(reslove => {

temp_request.push(() => {

reslove(request(...params_))

})

}))

break;

default:

reject(res.data.data)

}

},

fail(error) {

reject(error.data.data)

},

complete(res) {

}

})

})

}

function refresh() {

is_freshing = true

// 这里用的uni-app 获取微信code, 原生微信小程序 wx.login()

uni.login({

provider: 'weixin',

success: function (loginRes) {

http('/mob/auth/login/miniProgram', 'post', {code}, true)

.then((res) => {

uni.setStorageSync('api_token', res.token)

is_freshing = false

temp_request.map(cb => cb())

// 清空temp_request

temp_request = []

})

.catch((res) => {

uni.hideLoading();

})

}

});

}, 1500)

}

export default http

// 测试

onShow() {

// 在token过期的情况下,派发三个需要token的请求

http({url1, 'get'})

.then((res) => {

console.log(res)

})

http({url1, 'get'})

.then((res) => {

console.log(res)

})

http({url1, 'get'})

.then((res) => {

console.log(res)

})

}

以上是 【小程序】小程序无痛刷新token 的全部内容, 来源链接: www.h5w3.com/113189.html

度小满广告!风险提示:广告信息均来自平台方,不代表平台安全性,不构成建议!
度小满
回到顶部