【react框架之dvajs】dvajs项目中effect互相调用及阻塞的实现方式

在dva中实现两个effect方法互相使用,即方法A处理完了接口请求,拿到相关数据再去用另外一个getor方法。像下面这样的效果

业务需求

在这里插入图片描述

effects: {*getA({ type, payload }, { put, take }) {yield put({ type: "getB" });yield put({ type: "add", payload });},*getB({ payload }, { call, put }) {yield put({ type: "minus" });},},

页面上点击异步增加按钮,dispatchgetA方法,getA再去调用getB,这种需求应该很常见。

请添加图片描述
可以看到,我们在点击是时候,数据是会不断减少的。

扩展需求

effects: {*getA({ type, payload }, { put, take }) {console.log("aa");yield put({ type: "getB" });console.log("bb");yield put({ type: "add", payload });},*getB({ payload }, { call, put }) {yield put({ type: "minus" });console.log("cc");},}

在这里插入图片描述

上面我们看到,执行顺序是aa => bb => cc =>,也就是说明put方法是非阻塞的,在getA里面执行完同步的方法,再去执行getB,但是如果我们要实现在getB方法执行完成才继续执行后面的业务。就是 期望这个demo打印的顺序是,aa => cc => bb。
增加一个监听yield take("getB/@@end");就可以

effects: {*getA({ type, payload }, { put, take }) {console.log("aa");yield put({ type: "getB" });yield take("getB/@@end");console.log("bb");yield put({ type: "add", payload });},*getB({ payload }, { call, put }) {yield put({ type: "minus" });console.log("cc");},}

在这里插入图片描述
因为put是一个非阻塞的方法,put的使用效果和在外部使用dispatch是一样的,如果我们想等待getB执行完再接下去执行a里面的业务,就要用到take,它是redux-saga的方法,在dva中也有,他是用来一次性监听dispatch过来的action的,而再effect 前后会额外触发 /@@start/@@endaction,我们就可以监听/@@end,从而来监听effect的执行完成状态.
在这里插入图片描述
官网这里也给我们做了解释,大家可以仔细阅读下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/59595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录一次element 表格中input不可编辑的原因

场景:从子组件中把列表数据显示到表格,表格中的数据input不可编辑。 showCouponSelect(couponSelect) {this.benefit.couponSelect JSON.parse(JSON.stringify(couponSelect))console.log(-----showCouponSelect-------)console.log(this.benefit.couponSelect)thi…

Java面试题十五

一、Java中如何实现数据库连接和操作?JDBC的工作原理是什么? 在Java中,数据库连接和操作通常通过JDBC(Java Database Connectivity)来实现。以下是对这两个问题的详细回答: Java中实现数据库连接和操作 导…

Unity3D学习FPS游戏(10)子弹攻击敌人掉血(碰撞检测)

前言:前面最然创造出带有血条的敌人,但子弹打中敌人并没有效果。所以本篇将实现子弹攻击敌人,并让敌人掉血。 子弹攻击敌人掉血 整体思路目标补充知识-碰撞检测 准备工作刚体和碰撞器添加添加刚体后子弹代码优化补充知识-标签系统Tag添加 碰…

Tornado简单使用

Tornado简单使用 1 介绍 Tornado 是一个基于Python的Web服务框架和 异步网络库,它最初由 FriendFeed 开发,后来被 Facebook 收购并开源,通过利用非阻塞网络 I/O, Tornado 可以承载成千上万的活动连接,完美的实现了 长连接、WebS…

倍思获喜马拉雅年度最佳协作之星,打造移动数码品牌跨界新体验

近日,在“听见,共建,同行”——2024喜马拉雅有声之夜年度创作者大会暨峰爆榜颁奖典礼上,移动数码品牌Baseus倍思凭借其卓越的技术实力与创新的品牌理念,荣获“年度最佳协作之星”奖项。这一荣誉肯定了倍思在行业的深耕细作,也树立起品牌与喜马拉雅平台跨界合作、共同演绎音频生…

[单例模式]

[设计模式] 设计模式是软件工程中的一种常见做法, 它可以理解为"模板", 是针对一些常见的特定场景, 给出的一些比较好的固定的解决方案. 不同语言适用的设计模式是不一样的. 这里我们接下来要谈到的是java中典型的设计模式. 而且由于设计模式比较适合有一定编程经…

内部知识库:优化企业培训流程的关键驱动力

在当今快速变化的商业环境中,企业培训的重要性日益凸显。内部知识库作为整合、管理和分享企业内部学习资源的关键工具,正逐步成为优化企业培训流程的核心。以下将探讨内部知识库如何通过多种功能,助力企业提升培训效率、质量和员工满意度。 …

Ubuntu - 进入紧急模式,无法进入桌面

目录 一、问题 二、分析原因 三、解决 四、参考 一、问题 重新安装VMVare之后,将之前的虚拟机加载不进来 二、分析原因 查看系统错误日志 journalctl -xb | grep Failed mnt挂载找不到了 三、解决 查看系统错误日志 如果是磁盘错误,此时终端会有…

RUP 统一软件开发过程

RUP(Rational Unified Process)是一种软件开发过程框架, Rational表示RUP是由Rational公司提出的,Unified表示RUP是最佳开发经验总结,而Process表示RUP是一个软件开发过程。RUP提供了一种结构化的方法来管理软件开发项…

I.MX6U 裸机开发3. GPIO操作控制LED灯

I.MX6U 裸机开发3. GPIO操作控制LED灯 一、创建项目目录及源文件1. 新建目录2. 远程开发环境3. 创建源文件 二、代码编写1. 打开时钟2. 配置端口复用功能为GPIO3. 配置端口电气属性4. 设置GPIO方向(GDIR寄存器)5. 输出6. 死循环等待 三、编译程序1. 整体…

ubuntu 22.04 server 安装 mysql 5.7.40 LTS

ubuntu 22.04 server 安装 mysql 5.7.40 LTS 参考: ubuntu 22.04 server 安装 和 初始化 LTS https://blog.csdn.net/wowocpp/article/details/143562451 centos7 安装 mysql5.7 LTS https://blog.csdn.net/wowocpp/article/details/139467094 mysql 常用指令 L…

java ssm 公司内部员工管理系统 员工信息管理 企业员工 源码 jsp

一、项目简介 本项目是一套基于SSM的公司内部员工管理系统,主要针对计算机相关专业的和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本、软件工具等。 项目都经过严格调试,确保可以运行! 二、技术实现 ​后端技术&am…

《Python使用sqlite3数据库》

《Python使用sqlite3数据库》 1、连接数据库2、创建游标3、执行SQL语句4、提交更改5、查询数据6、关闭连接 Python可以使用多种数据库,以下是一般步骤和示例: 1、连接数据库 首先要安装对应的数据库驱动。如使用MySQL数据库,要安装pymysql库…

数据分析:宏基因组DESeq2差异分析筛选差异物种

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍原理:计算步骤:结果:加载R包准备画图主题数据链接导入数据Differential abundance (No BP vs 2BP TA)构建`countData`矩阵过滤低丰度物种构建DESeq数据对象DESeq2差异分析画图Di…

Android的Handler

1. Handler是用于线程间通信,本质上是: Handler调用发送方法,向与Looper绑定的消息队列写入消息,然后Looper.loop()会循环的从消息队列里拿出消息。并调用dispatchMessage处理消息。而需要此消息的线程会实现回调的handleMessage…

GIF图片格式详解(三)

gif历史部分介绍请参考上一篇《GIF图片格式详解(一)》, 格式部分详解参考 《GIF图片格式详解(二)》 或直接访问博客地址:https://blog.whatsroot.xyz/2023/12/16/all-about-gif/ 本篇介绍下用于处理gif图…

Spark的yarn集群环境搭建

一.为什么要搭建yarn集群 为什么要将Spark的程序运行在YARN上,不运行在自带的 Standalone集群上? 1、统一化资源管理 Standalone是Spark专用的资源管理集群,只能用于运行 Spark程序 YARN是功能的分布式资源管理平台,可以运行各种分…

51单片机教程(六)- LED流水灯

1 项目分析 基于点亮LED灯、LED灯闪烁,扩展到构成最简单、花样流水灯。 2 技术准备 1 流水灯硬件及原理图 流水灯是由多个LED灯组成的 2 C语言知识点 数组 数组声明:长度不可变 数据类型 数组名称[长度n] // 整数型默认为0,小数型默认…

PyQt5实战——翻译的实现,第一次爬取微软翻译经验总结(八)

个人博客:苏三有春的博客 系类往期文章: PyQt5实战——多脚本集合包,前言与环境配置(一) PyQt5实战——多脚本集合包,UI以及工程布局(二) PyQt5实战——多脚本集合包,程序…

前端好用的网站分享——CSS(持续更新中)

1.CSS Scan 点击进入CSS Scan CSS盒子阴影大全 2.渐变背景 点击进入color.oulu 3.CSS简化压缩 点击进入toptal 4.CSS可视化 点击进入CSS可视化 这个强推,话不多说,看图! 5.Marko 点击进入Marko 有很多按钮样式 6.getwaves 点击进入getwaves 生…