return new Promise((resolve, reject) => {
let headers = new Headers()
headers.append('Content-Type', 'application/json;charset=UTF-8')
headers.append('Connection', 'keep-alive')
// 1:取出存储的token
storage.load({key: Login_Info.TOKEN})
.then(data => data.access_token)
.then(token => {
//2.拼接请求头,发送数据
headers.append('Cookie', 'token=' + token)
setTimeout(() => {
this.timeout_fetch(fetch(new_url, {
method: 'POST',
headers: headers,
body: JSON.stringify(bodyParams),
}))
.then(response => {
//3 判断是否需要需要重新获取token
if (response.ok) {
//3.1:如果请求成功,则直接返回
resolve(response.json());
} else {
//3.2: 如果请求被拒接,则刷新token
let token_url = this.encodeURL(Config.BASE_URL + Config.API_REFRESH_TOKEN, {token: token}, suffixType)
fetch(token_url, {
method: 'POST',
headers: {
'Connection': 'keep-alive',
'Content-Type': 'application/json',
},
body: JSON.stringify(""),
})
.then(response => {
if (response.ok) {
//3.2.1: 刷新token成功,则重新发请求
return this.post(new_url, params, bodyParams, suffixType)
} else {
//3.2.2: 刷新token失败,则直接提示
if (requestTime == 1) {
reject(response.status)
return
}
requestTime++
return this.post(new_url, params, bodyParams, suffixType)
}
})
.catch(err => {
reject(err)
})
}
})
.catch((error) => {
reject(error);
})
.done()
}, 500);
})
.catch(err => {
reject(err)
})
})
React-Native Fetch 异步递归
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- (1)TextInput文本输入框 TextInput属性 (1) keyboardType :设置键盘类型(决定...
- 加载之初需要我们从后台获取数据。没有后台的情况下可以用node.js做模拟服务器:在项目下/public/test...
- 事件背景:2018年08月27日星期一,在商城v1.13.0上线后,项目组启动强更。多位线上用户反映点击商城端的更...
- React Native中虽然也内置了XMLHttpRequest 网络请求API(也就是俗称的ajax),但XM...