首页 > 其他分享 >Promise与Action的“爱恨情仇”

Promise与Action的“爱恨情仇”

时间:2023-09-25 13:32:00浏览次数:47  
标签:vuex 情仇 messages actions action Promise Action data updating

都知道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;
			});
	}
};

标签:vuex,情仇,messages,actions,action,Promise,Action,data,updating
From: https://blog.51cto.com/u_15296224/7595158

相关文章

  • Verdi波形查看transaction+门控时钟+时钟切换+vcs的ucli+斐波那契LFSR和伽罗瓦LFSR
    Verdi波形查看transaction除了以下两个选项以外,+UVM_TR_RECORD+UVM_LOG_RECORD还需要声明+UVM_VERDI_TRACE选项+UVM_VERDI_TRACE=UVM_AWARE+RAL+TLM+MSG+HIER+PRINT否则使用的是VC的环境抓取,而不是Verdi环境。(VerdiTransactiondebug)门控时钟时钟门控如果仅仅使用一个......
  • Vue.js 3.0 promise的运用
    ......
  • 你是怎么理解 Promise ?
    理解Promise是面试中一个常见的问题:Promise是一种用于处理JavaScript中异步操作的对象,它提供了一种更结构化和可管理的方式来处理异步代码,以避免回调地狱(CallbackHell)和提供更好的代码可读性。关键概念和理解:状态(State):Promise有三种状态,分别是待定(pending)、已解决(fulfilled)......
  • promise对象的三种状态
    Promise对象只有三种状态。异步操作“未完成”(pending)异步操作“已完成”(resolved,又称fulfilled)异步操作“失败”(rejected)settled叫做已决议,不是Promise三种状态. ......
  • 支付宝一面:多线程事务怎么回滚?说用 @Transactional 可以回去等通知了!
    背景介绍1,最近有一个大数据量插入的操作入库的业务场景,需要先做一些其他修改操作,然后在执行插入操作,由于插入数据可能会很多,用到多线程去拆分数据并行处理来提高响应时间,如果有一个线程执行失败,则全部回滚。2,在spring中可以使用@Transactional注解去控制事务,使出现异常时会进行......
  • 自定义实现promise.all
    Promise.all是一个在JavaScript中常见的函数,用于处理一个Promise数组。当数组中的所有Promise都完成时,Promise.all将返回一个新的Promise,该Promise将解析为包含所有输入Promise解析值的数组。如果任何一个Promise失败,返回的Promise将立即被标记为失败,并且该数组将只包含失败的Prom......
  • 手写promise核心代码(一)
     classmyPromise{staticPENDING='pending'staticREJECT='reject'staticRESOLVE='resolve';constructor(executor){this.value=nullthis.status=myPromise.PENDINGtry{executor(this.resolve1.bind......
  • c++ 简单模拟js Promise
    main:#include<stdio.h>#include"common.h"#include"promise.h"#include<chrono>//std::chrono::seconds#include<thread>//std::this_thread::sleep_forintmain(void){Promise*pro=newPromise([](ca......
  • svn 提交的时候 Transaction is out of date
    更新一下再提交就好了 Transactionisoutofdate svn:Commitfailed(detailsfollow): svn:Outofdate:'/project/test/branches/test'intransaction'i' eclips控制台提示如上错误 解决:这个是由于本地版本与svn上版本不同造成的,更新一下在提交就OK了 ......
  • 解决Promise的多并发问题
    提起控制并发,大家应该不陌生,我们可以先来看看多并发,再去聊聊为什么要去控制它多并发一般是指多个异步操作同时进行,而运行的环境中资源是有限的,短时间内过多的并发,会对所运行的环境造成很大的压力,比如前端的浏览器,后端的服务器,常见的多并发操作有:前端的多个接口同时请求前端多......