Я использую Nuxt.js
с axios
для разработки веб-сайта. Вот мои версии:
"@nuxtjs/axios": "^5.3.6",
"nuxt": "^2.4.0",
Теперь я хочу axios
auto Повторить , когдазапрос является ошибкой, такой как 500
и 502
Я пробовал настройку Nuxt Axios, как показано ниже:
axios:{
retry:{
retries:3
}
}
Запрос - повторить попытку и никогда не останавливаться
Затем я пробую некоторые библиотеки, такие как retry-axios
, ошибка повторится только один раз, и все настройки не работают.
Я думаю, что эта библиотека не совместима с моим проектом, поэтому я попытался сделать этофункция без библиотеки.
Это мой код в plugin/axios.js
export default function (ctx) {
/* Here is some other code for the passing the login token to the axios header*/
const { $axios, redirect, app } = ctx
$axios.defaults.retry = 3
$axios.onRequest((config) => {
console.log('onRequest', config)
})
$axios.onError(function (error, response) {
if (error.config) {
const config = { ...error.config }
console.log("error.config", config)
config.__retryCount = config.__retryCount || 0
// Check if we've maxed out the total number of retries
if (config.__retryCount >= config.retry) {
// Reject with the error
return Promise.reject(error)
}
// Increase the retry count
config.__retryCount += 1
// Create new promise to handle exponential backoff
const backoff = new Promise(function(resolve) {
setTimeout(function() {
resolve()
}, config.retryDelay || 1)
})
console.log('config pass to $axios', config)
// Return the promise in which recalls axios to retry the request
return backoff.then(function() {
return $axios(config)
})
}
})
}
Вот результат журнала
+-----------------------+-------+--------------+
| | retry | __retryCount |
+-----------------------+-------+--------------+
| onRequest | No | No |
+-----------------------+-------+--------------+
| Error.config | No | No |
+-----------------------+-------+--------------+
| config pass to $axios | No | Yes |
+-----------------------+-------+--------------+
Retry и retryCount не переданы в конфигурацию при повторной попытке запроса,Таким образом, axios будет повторять попытки снова и снова. Может кто-нибудь сказать мне, как решить эту проблему? Это ошибка аксиоса или моя логика неверна?