Promise与Action的“爱恨情仇”
  IV4cV57K1sFC 2023年11月02日 70 0

都知道Vue中,或者准确地说是vuex中,action是异步函数(表现为actions中的函数),但我们怎么知道他们已经完成了呢?

用过vuex的我们可能一时间想到了【观察计算属性的改变】的方法,但这不够理想。 其实我们有更好的办法:在action中返回一个promise对象

另外,调用dispatch也会返回一个promise对象。运用它就可以在action运行结束时去运行其他代码 —— 比如:loading。

比如:

actions:{
	getMessages({commit}){
		return fetch('/api/new-messages')
				.then((res)=>res.json())
				.then((data)=>{
					if(data.messages.length){
						commit('addMessage',data.messages);   //往mutation里发通知
					}
				});
	}
}

上面代码较之前改动很小 —— 只是在fetch前加了一个return。

或者,我们可以这样玩:

import { mapState } from 'vuex';

const VxCount={
	template:`<p>
				Message:{{message.length}}
				<span v-if="loading">(updating...)</span>
				<a v-else @click.prevent="handleUpdate">(update)</a>
			  </p>`,
	data:()=>({
		updating:false
	}),
	computed:mapState(['message']),
	methods:{
		this.updating=true;
		this.$store.dispatch('getMessages')
			.then(()=>{
				this.updating=false;
			});
	}
};
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  gYl4rku9YpWY   2024年05月17日   60   0   0 Vue
  JZjRRktyDDvK   2024年05月02日   88   0   0 Vue
  VlNAKfyhjjp9   2024年04月30日   83   0   0 Vue
  JNTrZmaOQEcq   2024年04月30日   58   0   0 Vue
  onf2Mh1AWJAW   2024年05月17日   63   0   0 Vue
  3A8RnFxQCDqM   2024年05月17日   60   0   0 Vue
IV4cV57K1sFC