最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解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ì)更簡(jiǎn)單一點(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ù)場(chǎng)景io使用不是很高所以"看起來是對(duì)的",嚴(yán)謹(jǐn)?shù)淖龇☉?yīng)該還是需要用異步來完成后續(xù)操作的

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

相關(guān)文章

  • Vue3異步數(shù)據(jù)加載組件suspense的使用方法

    Vue3異步數(shù)據(jù)加載組件suspense的使用方法

    前端開發(fā)中異步請(qǐng)求是非常常見的事情,比如遠(yuǎn)程讀取圖片,調(diào)用后端接口等等,這篇文章主要給大家介紹了關(guān)于Vue3異步數(shù)據(jù)加載組件suspense的使用方法,suspense中文含義是懸念的意思,需要的朋友可以參考下
    2021-08-08
  • vue2.0 路由模式mode=

    vue2.0 路由模式mode="history"的作用

    這篇文章主要介紹了vue2.0 路由模式mode="history"的作用,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2018-10-10
  • Vue基礎(chǔ)教程之條件渲染和列表渲染

    Vue基礎(chǔ)教程之條件渲染和列表渲染

    Vue會(huì)盡可能高效地渲染元素,通常會(huì)復(fù)用已有元素而不是從頭開始渲染。這么做會(huì)使Vue變得非???下面這篇文章主要給大家介紹了Vue基礎(chǔ)教程之條件渲染和列表渲染的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • vue采用EventBus實(shí)現(xiàn)跨組件通信及注意事項(xiàng)小結(jié)

    vue采用EventBus實(shí)現(xiàn)跨組件通信及注意事項(xiàng)小結(jié)

    EventBus是一種發(fā)布/訂閱事件設(shè)計(jì)模式的實(shí)踐。這篇文章主要介紹了vue采用EventBus實(shí)現(xiàn)跨組件通信及注意事項(xiàng),需要的朋友可以參考下
    2018-06-06
  • vue請(qǐng)求后端數(shù)據(jù)和跨域問題解決

    vue請(qǐng)求后端數(shù)據(jù)和跨域問題解決

    這篇文章主要介紹了vue請(qǐng)求后端數(shù)據(jù)和跨域問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • vue項(xiàng)目在IE瀏覽器下運(yùn)行空白問題及解決

    vue項(xiàng)目在IE瀏覽器下運(yùn)行空白問題及解決

    IE11瀏覽器無法解析ES6語(yǔ)法導(dǎo)致Vue項(xiàng)目在IE11下顯示空白,解決方法包括安裝babel-polyfill,并在項(xiàng)目的main.js文件中引入babel-polyfill,此外,js-base64版本3及以上不兼容IE11,解決辦法是使用版本3以下的js-base64,這些措施可以幫助兼容IE11,確保項(xiàng)目正常運(yùn)行
    2024-09-09
  • vue-draggable實(shí)現(xiàn)拖拽表單的示例代碼

    vue-draggable實(shí)現(xiàn)拖拽表單的示例代碼

    本文主要介紹了vue-draggable實(shí)現(xiàn)拖拽表單的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • vue2.0實(shí)現(xiàn)倒計(jì)時(shí)的插件(時(shí)間戳 刷新 跳轉(zhuǎn) 都不影響)

    vue2.0實(shí)現(xiàn)倒計(jì)時(shí)的插件(時(shí)間戳 刷新 跳轉(zhuǎn) 都不影響)

    我發(fā)現(xiàn)好多倒計(jì)時(shí)的插件,刷新都會(huì)變成從頭再來,于是自己用vue2.0寫了一個(gè),感覺還不錯(cuò),特此分享到腳本之家平臺(tái)供大家參考下
    2017-03-03
  • Vue利用canvas實(shí)現(xiàn)移動(dòng)端手寫板的方法

    Vue利用canvas實(shí)現(xiàn)移動(dòng)端手寫板的方法

    本篇文章主要介紹了Vue利用canvas實(shí)現(xiàn)移動(dòng)端手寫板的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • iview+vue實(shí)現(xiàn)導(dǎo)入EXCEL預(yù)覽功能

    iview+vue實(shí)現(xiàn)導(dǎo)入EXCEL預(yù)覽功能

    這篇文章主要為大家詳細(xì)介紹了iview+vue實(shí)現(xiàn)導(dǎo)入EXCEL預(yù)覽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評(píng)論

武安市| 达尔| 靖江市| 时尚| 芜湖市| 南华县| 镇远县| 紫阳县| 织金县| 阆中市| 南城县| 天台县| 门头沟区| 闵行区| 泰和县| 涞源县| 合水县| 宁南县| 漳州市| 苏州市| 古交市| 湛江市| 临沭县| 崇明县| 紫金县| 屯留县| 枣阳市| 墨脱县| 北宁市| 丰城市| 龙里县| 察哈| 永和县| 冷水江市| 杭锦旗| 临清市| 嘉禾县| 开江县| 开化县| 沁阳市| 汝州市|