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...