近日在優化網站非同步的 api 存取。
當換頁或 component 被銷毀時,取消 api 的請求。發現以往 CancelToken 的做法已經不再被 axios 官方推薦。
參考連結: https://axios-http.com/docs/cancellation
取代的做法是 AbortController。 以下是官方範例:
const controller = new AbortController(); axios.get('/foo/bar', { signal: controller.signal }).then(function(response) { //... }); // cancel the request controller.abort()
比起前一版的寫法確實友善許多。
如果要同時解除多個請求,只要共用同一個 controller 就可以做到
const controller = new AbortController(); axios.get('/foo/bar_1', { signal: controller.signal }).then(function(response) { //... }); axios.get('/foo/bar_2', { signal: controller.signal }).then(function(response) { //... }); // cancel the request // 兩個請求共用一個 controller ,所以兩個請求都會被取消 controller.abort()
也可以用在 js 原生的 fetch
const controller = new AbortController(); const signal = controller.signal; fetch('/users', { method: 'get', signal: signal }).then(function(response) { // handle response }).catch(function(error) { if (error.name === 'AbortError') { console.log('Fetch aborted'); } else { // handle other errors } }); // later on controller.abort();