鍍金池/ 問答/HTML/ Vue單頁面應(yīng)用,路由的跳轉(zhuǎn)導(dǎo)致的頁面改變的內(nèi)存問題?

Vue單頁面應(yīng)用,路由的跳轉(zhuǎn)導(dǎo)致的頁面改變的內(nèi)存問題?

單頁面應(yīng)用中,頁面vue組件中執(zhí)行了async方法,該方法里面有很多promise,如果現(xiàn)在退出頁面,因?yàn)檫@些promise會(huì)操作vuex的數(shù)據(jù),所以怎么中斷這個(gè)async方法不讓他對(duì)vuex進(jìn)行影響?

回答
編輯回答
氕氘氚

你這個(gè)頁面都關(guān)閉了,代碼都不執(zhí)行了,怎么可能產(chǎn)生影響

2017年10月9日 07:28
編輯回答
夢(mèng)一場(chǎng)

如果你指的組件中的 async 方法是異步請(qǐng)求的話,可以在 beforeDestory 里執(zhí)行 cancel request

2017年12月27日 19:05
編輯回答
尤禮

題主表述有點(diǎn)問題,你應(yīng)該指的是路由變化導(dǎo)致的“退出頁面”,而不是“關(guān)閉瀏覽器頁面”吧?

一個(gè)異步函數(shù)里面可以有多個(gè)異步操作,cancel 其中一個(gè)很困難,因?yàn)槟悴惶菀字垃F(xiàn)在執(zhí)行到哪一步。我能想到的解決方案有幾個(gè):

  1. beforeDestroy 的時(shí)候加一個(gè)標(biāo)記,每一步異步執(zhí)行前都檢查這個(gè)標(biāo)記,如果已被修改就停止
  2. 使用隊(duì)列的方式管理多個(gè)異步操作,并且設(shè)置一個(gè)標(biāo)記給隊(duì)列
  3. 異步函數(shù)全部綁定在當(dāng)前實(shí)例上,并且檢查當(dāng)前實(shí)例的 this.$el.parentNode
2017年12月22日 16:22
編輯回答
傻丟丟
let isLeave = false
function wrapWithCancel(fn) {
    return data => {
      if (!isLeave) {
        return fn(data);
      }
    }
 }


beforeRouteLeave (to, from, next) {
    isLeave  = true
},
methods: {
    async m1() {
            
            
          const data = await wrapWithCancel(fetchData)();
          const userData = await wrapWithCancel(updateUserData)(data);
          const userAddress = await wrapWithCancel(updateUserAddress)(userData);
          const marketingData = await wrapWithCancel(updateMarketingData)(userAddress);
    }
}
2018年9月2日 11:44