欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解vuex中action何時(shí)完成以及如何正確調(diào)用dispatch的思考

 更新時(shí)間:2019年01月21日 15:11:30   作者:kjimlau  
這篇文章主要介紹了詳解vuex中action何時(shí)完成以及如何正確調(diào)用dispatch的思考,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

在項(xiàng)目中遇到關(guān)于action與dispatch使用的一些細(xì)節(jié)問題,經(jīng)過搜索得到了一些答案。

特意在此提出,如有錯(cuò)誤還請(qǐng)指出,十分感謝~

問題1:如果action是異步的,那么怎么知道它什么時(shí)候完成?在vuex的官網(wǎng)給出了答案:

注:如果需要通過組合多個(gè)action來完成某些邏輯,用async/await會(huì)更簡單一點(diǎn)

問題2: 如果action是同步的,就不需要等待它完成了嗎?

其實(shí)這個(gè)問題相當(dāng)于在w:dispatch('some action')是一個(gè)同步函數(shù)還是異步函數(shù)。

如果dispatch是一個(gè)異步函數(shù)(返回一個(gè)promise),那么即使action里面的邏輯是同步的,如果需要等待這個(gè)action完成之后才進(jìn)行某些操作,仍然是需要用異步等待dispatch().then(()=> {})來實(shí)現(xiàn)

通過查看vuex的源碼找到了答案:

 dispatch (_type, _payload) {
  // check object-style dispatch
  const {
   type,
   payload
  } = unifyObjectStyle(_type, _payload)

  const action = { type, payload }
  const entry = this._actions[type]
  if (!entry) {
   if (process.env.NODE_ENV !== 'production') {
    console.error(`[vuex] unknown action type: ${type}`)
   }
   return
  }

  try {
   this._actionSubscribers
    .filter(sub => sub.before)
    .forEach(sub => sub.before(action, this.state))
  } catch (e) {
   if (process.env.NODE_ENV !== 'production') {
    console.warn(`[vuex] error in before action subscribers: `)
    console.error(e)
   }
  }

  const result = entry.length > 1
   ? Promise.all(entry.map(handler => handler(payload)))
   : entry[0](payload)

  return result.then(res => {
   try {
    this._actionSubscribers
     .filter(sub => sub.after)
     .forEach(sub => sub.after(action, this.state))
   } catch (e) {
    if (process.env.NODE_ENV !== 'production') {
     console.warn(`[vuex] error in after action subscribers: `)
     console.error(e)
    }
   }
   return res
  })
 }

dispatch函數(shù)返回的是一個(gè)promise,所以dispatch后如果需要跟進(jìn)操作(比如dispatch里面commit了一個(gè)state,后續(xù)要用到這個(gè)state),正確的做法應(yīng)該是需要用異步的方式來完成后續(xù)的邏輯

注:用同步的寫法看起來好像state也是對(duì)的,但可能只是恰好我的業(yè)務(wù)場景io使用不是很高所以"看起來是對(duì)的",嚴(yán)謹(jǐn)?shù)淖龇☉?yīng)該還是需要用異步來完成后續(xù)操作的

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文帶你詳細(xì)了解vue axios的封裝

    一文帶你詳細(xì)了解vue axios的封裝

    對(duì)請(qǐng)求的封裝在實(shí)際項(xiàng)目中是十分必要的,它可以讓我們統(tǒng)一處理 http 請(qǐng)求,比如做一些攔截,處理一些錯(cuò)誤等,本篇文章將詳細(xì)介紹如何封裝 axios 請(qǐng)求,需要的朋友可以參考下
    2023-09-09
  • Vue+Bootstrap收藏(點(diǎn)贊)功能邏輯與具體實(shí)現(xiàn)

    Vue+Bootstrap收藏(點(diǎn)贊)功能邏輯與具體實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Vue+Bootstrap收藏(點(diǎn)贊)功能邏輯與具體實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • vue自定義樹狀結(jié)構(gòu)圖的實(shí)現(xiàn)方法

    vue自定義樹狀結(jié)構(gòu)圖的實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于vue自定義樹狀結(jié)構(gòu)圖的實(shí)現(xiàn)方法,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • vue實(shí)現(xiàn)PC端分辨率適配操作

    vue實(shí)現(xiàn)PC端分辨率適配操作

    這篇文章主要介紹了vue實(shí)現(xiàn)PC端分辨率適配操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue自定義指令和動(dòng)態(tài)路由實(shí)現(xiàn)權(quán)限控制

    vue自定義指令和動(dòng)態(tài)路由實(shí)現(xiàn)權(quán)限控制

    這篇文章主要介紹了vue自定義指令和動(dòng)態(tài)路由實(shí)現(xiàn)權(quán)限控制的方法,幫助大家更好的理解和學(xué)習(xí)vue,感興趣的朋友可以了解下
    2020-08-08
  • vue3如何加載本地圖片等靜態(tài)資源淺析

    vue3如何加載本地圖片等靜態(tài)資源淺析

    在最近新起的項(xiàng)目中,用到了較新的技術(shù)棧vue3.2+vite+ts,跟著網(wǎng)上的寫法漸漸上手了,下面這篇文章主要給大家介紹了關(guān)于vue3如何加載本地圖片等靜態(tài)資源的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • vue-element-admin搭建后臺(tái)管理系統(tǒng)的實(shí)現(xiàn)步驟

    vue-element-admin搭建后臺(tái)管理系統(tǒng)的實(shí)現(xiàn)步驟

    本文主要介紹了vue-element-admin搭建后臺(tái)管理系統(tǒng)的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • vue通過video.js解決m3u8視頻播放格式的方法

    vue通過video.js解決m3u8視頻播放格式的方法

    這篇文章主要給大家介紹了關(guān)于vue通過video.js解決m3u8視頻播放格式的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 詳解Vue3?SFC?和?TSX?方式調(diào)用子組件中的函數(shù)

    詳解Vue3?SFC?和?TSX?方式調(diào)用子組件中的函數(shù)

    在使用?.vue?定義的組件中,setup?中提供了?defineExpose()?方法,該方法可以將組件內(nèi)部的方法暴露給父組件,這篇文章主要介紹了Vue3?SFC?和?TSX?方式調(diào)用子組件中的函數(shù),需要的朋友可以參考下
    2022-10-10
  • vue使用showdown并實(shí)現(xiàn)代碼區(qū)域高亮的示例代碼

    vue使用showdown并實(shí)現(xiàn)代碼區(qū)域高亮的示例代碼

    這篇文章主要介紹了vue使用showdown并實(shí)現(xiàn)代碼區(qū)域高亮的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10

最新評(píng)論