我有一个异步获取数据的方法:
getData: () => {
return new Promise((resolve, reject) => {
axios.get('/api/getData').then(res => {
/* 存在下面两种可能返回 */
/* 接口正确返回 */
{
status: 1,
msg: '获取成功',
data: {...}
}
/* 接口错误返回 */
{
status: 429,
msg: '接口调用最大频次为1req/s'
}
})
})
}
因为错误的返回是因为接口调用频次过高,所以就想如果返回429就等1秒后再重发请求:
getData: () => {
return new Promise((resolve, reject) => {
axios.get('/api/getData').then(res => {
if (res.status === 1) {
resolve(res.data)
} else {
reject()
}
})
}).catch(() => {
// 这里该如何写?
// setTimeout(() => {
// getData().then()?
// }, 1000)
})
}
请教一下如何在promise里写递归(也不完全叫递归,就是轮询,正确返回就跳出)啊?
大概是这么个逻辑,没调试,可能有错。异步递归比较难写,用 await 好写些。
如果不用递归,用循环,逻辑会更清楚一些(也没调试,可能有错)