最近一个小问题困扰我,就是在小程序中请求某个 API 会低概率出现 502 的现象,但重新访问又可以。
由于请求是异步的,所以封装成了 Promise 方便调用,在此基础上想实现 502 重连,就是访问出错重新连接。
function request(url) {
return new Promise((resolve, reject) => {
wx.request({
url,
success: res => {
// 业务逻辑
resolve(res)
}
})
})
}
修改之后的代码,调用一次,直到响应不再 502 返回结果
function request(url) {
return new Promise((resolve, reject) => {
wx.request({
url,
success: res => {
if (res.statusCode != 200) {
// 响应不正常则返回递归逻辑
return resolve({ request: true })
}
// 业务逻辑
resolve(res)
}
})
}).then(res => {
// 根据递归逻辑响应数据还是重新调用
return res.request ? request.apply(this, arguments) : Promise.resolve(res)
})
}
调用很简单
request('https://example.com').then(res => {
... ...
})