在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/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)在退出頁面,因為這些promise會操作vuex的數(shù)據(jù),所以怎么中斷這個async方法不讓他對vuex進行影響?

回答
編輯回答
氕氘氚

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

2017年10月9日 07:28
編輯回答
夢一場

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

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

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

一個異步函數(shù)里面可以有多個異步操作,cancel 其中一個很困難,因為你不太容易知道現(xiàn)在執(zhí)行到哪一步。我能想到的解決方案有幾個:

  1. beforeDestroy 的時候加一個標記,每一步異步執(zhí)行前都檢查這個標記,如果已被修改就停止
  2. 使用隊列的方式管理多個異步操作,并且設(shè)置一個標記給隊列
  3. 異步函數(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