前提・実現したいこと
vue.jsを使用したwebアプリケーションを開発しております。
route変更時に実行中のリクエストのキャンセル処理も実装したいと思っていますが、うまく動きません。
パラメータなしのaxios.get(url,cancelToken)
の形ではキャンセル処理を実装することができましたが、
パラメータありのaxios.get(url,params,config)
の場合だとうまくいかないようです。
どのように引数を指定すれば良いでしょうか。
ご教授いただけると幸いです。
該当のソースコード
js
1import axios from 'axios' 2 3const state = { 4 source: axios.CancelToken.source() 5} 6const getters = { 7 source: state => state.source ? state.source: '', 8} 9const mutations ={ 10 11} 12const actions = { 13 async getIndividual({commit, state}, {post_id, user_id}){ 14 let cancelToken = { 15 cancelToken: state.source.token 16 } 17 await axios.get('/api/individual', { 18 params: { 19 post_id: post_id, 20 user_id: user_id 21 } 22 },cancelToken).then(result=>{ 23 //省略 24 }).catch(error=>{ 25 if (axios.isCancel(error)){ 26 console.log('canceled') 27 } else { 28 console.log(error) 29 } 30 }) 31 }, 32 cancel({state}){ 33 if (state.source != 'undefined'){ 34 console.log(state.source.cancel) 35 state.source = axios.CancelToken.source() 36 } 37 }, 38}
試したこと
第二引数と第三引数を入れ替えてみる
//state,getters,mutations省略 const actions = { async getIndividual({commit, state}, {post_id, user_id}){ let cancelToken = { cancelToken: state.source.token } await axios.get('/api/individual',cancelToken, { //ここの順番を入れ替えました。 params: { post_id: post_id, user_id: user_id } }).then(result=>{ //省略 }).catch(error=>{ if (axios.isCancel(error)){ console.log('canceled') } else { console.log(error) } }) }, cancel({state}){ if (state.source != 'undefined'){ console.log(state.source.cancel) state.source = axios.CancelToken.source() } }, }
axios.get(url,cancelToken,params)の順番に変えてみたところキャンセル処理が実行されておりましたが、当然のことながらparamsが読み込まれずに500エラー
が返ってきました。
補足情報(FW/ツールのバージョンなど)
Vue.js v2.5.17
axios v0.21.1
vuex v3.6.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/01 03:37