国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 12:14:28
字體:
來源:轉載
供稿:網(wǎng)友

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

特意在此提出,如有錯誤還請指出,十分感謝~

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

注:如果需要通過組合多個action來完成某些邏輯,用async/await會更簡單一點

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

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

如果dispatch是一個異步函數(shù)(返回一個promise),那么即使action里面的邏輯是同步的,如果需要等待這個action完成之后才進行某些操作,仍然是需要用異步等待dispatch().then(()=> {})來實現(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ù)返回的是一個promise,所以dispatch后如果需要跟進操作(比如dispatch里面commit了一個state,后續(xù)要用到這個state),正確的做法應該是需要用異步的方式來完成后續(xù)的邏輯

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 铁岭市| 沅陵县| 阳城县| 平安县| 容城县| 绥棱县| 呼和浩特市| 普定县| 合山市| 鄂伦春自治旗| 格尔木市| 凤庆县| 嘉荫县| 焦作市| 金乡县| 樟树市| 若尔盖县| 玉田县| 筠连县| 景宁| 湘潭市| 松原市| 防城港市| 齐齐哈尔市| 当雄县| 安远县| 托克逊县| 绍兴市| 崇左市| 资阳市| 宜川县| 乃东县| 永登县| 岑巩县| 普格县| 安多县| 台州市| 邯郸市| 名山县| 安龙县| 黄浦区|