解决umi.js或dva.js中effect函数发生错误dispatch失效的问题

news2025/1/21 13:03:56

问题背景

在项目的model文件中,通常在effect中进行网络请求等异步操作,当网络错误或者请求结果错误时,以及代码语法错误时,无论是否主动使用throw语句抛出错误,下一次再调用dispatch访问effect中的函数时,均会失效。

问题复现

  1. 编辑完表单后通过dispatch 访问model中effects中的edit函数
    在这里插入图片描述
  2. edit 方法中进行网络请求,更新表单数据等操作
    在这里插入图片描述
  3. 此时发生了网络错误,或者服务端异常,返回5xx状态的错误结果。控制台的打印结果为:
    在这里插入图片描述
    此时系统界面上的表现一切正常,加载状态正常结束,页面提示也正常,理论上等待网络或者服务器正常之后再次点击按钮,重新执行一遍流程就能返回正常结果
  4. 但是,结果如下
    在这里插入图片描述
    dispatch函数没有成功执行,甚至都没有进入到effects的edit函数中,也没有发起网络请求,界面发生了死锁。
    而且经过测试,此时访问其他的effects函数同样会失效,但是能够正常访问reducers函数。
  5. 总结一下,错误的发生条件:
    1)effects函数中发生错误,但是没有捕获。
    2)捕获错误之后,使用throw关键字抛出。(不抛出就没问题)

原因分析

在问题复现的第三步中,有两个值得注意的输出:

  1. 第一个是dispatch 的返回值,是一个pending 状态的promise对象,而且经过测试在这个dispatch之后使用.then/.catch 都不能正常运行。而在effect函数正常执行时,这个返回的promise对象的状态是fulfilled
    在这里插入图片描述
    由此推测,dispatch 失效的原因应该是 umi/dva 在dispatch实现的时候做了错误的兜底捕获,并在发生这种未捕获的错误时改变自身的状态,并在下一次被调用时阻止调用。then方法无法执行的原因应该也是内部做了二次封装,返回的对象并不是一个典型的promise对象。但这些都是主观推测,等有空了研究下dispatch的源码。
  2. 另一个值得注意的是最后输出的一段奇怪的报错信息,明显与正常的js代码报错不同:
    在这里插入图片描述
  3. 反思了下项目的设计,在发生错误或者抛出错误之后,没有做全局错误的兜底捕获,这明显是不对的,很有可能造成项目的崩溃,而且也不方便错误的定位。

解决方法

搜索上诉的报错信息发现有现成的解决方案:
umi项目中报错uncaught at _callee3 at _calle3
其他解决方案:
使用dva中函数,如果返回错误结果,再次调用,dispatch无响应
总结一下,主要有两个方案:

  1. 使用try...catch... 主动捕获可能发生错误的代码,并进行手动处理,不要使用 throw 再次抛出。
  2. 使用 dva 框架自带的 onError 全局错误管理函数,捕获错误并处理。

Dva文档中的描述:
在这里插入图片描述
Umi文档中的描述:
在这里插入图片描述

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

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

相关文章

GRPC 学习记录

GRPC 安装 安装 grpcio、grpcio-tools、protobuf、 pip install grpcio -i https://pypi.tuna.tsinghua.edu.cn/simple pip install grpcio-tools -i https://pypi.tuna.tsinghua.edu.cn/simple pip install protobuf -i https://pypi.tuna.tsinghua.edu.cn/simple常用类型 p…

Spring系列篇 -- Bean的生命周期

目录 经典面试题目: 一,Bean的生命周期图 二,关于Bean的生命周期流程介绍: 三,Bean的单例与多例模式 总结: 前言:今天小编给大家带来的是关于Spring系列篇中的Bean的生命周期讲解。在了解B…

Wlan安全——认证与加密方式(WPA/WPA2)

目录 终端认证技术 WEP认证 PSK认证 802.1x认证与MAC认证 Portal认证 数据加密技术 WEP加密 TKIP加密 CCMP加密 TKIP和CCMP生成密钥所需要的密钥信息 802.11安全标准 WEP共享密钥认证、加密工作原理 WEP共享密钥认证 WEP加解密过程 PSK认证以及生成动态密钥的工…

allegro更新封装如何操作

1、打开brd文件,然后place->update symbols 2、找到要更新的器件

速卖通、阿里国际站需不需要测评?补单或许能带来意想不到的效果

今天和各位聊聊速卖通和阿里国际站,不管新卖家或者老买家都会遇到的各种问题。 首先聊一下新卖家,新卖家店铺刚开,产品先尽可能的去铺开,把店铺规划好,然后就是坐等开单,前期产品上传上去之后是不是感觉流…

比特币凌晨短线暴跌,17万多头爆仓近10亿美元!原因何在?

凌晨5:30AM左右,加密货币短线暴跌。比特币触及24715美元低点,随后回升至26000美元以上,日内跌幅一度扩大至7%以上。以太坊击穿1500美元,现已回调至1650以上,山寨币也出现集体下跌。 此次下跌使比特币市值自6月16日以来…

Linux系统之安装my-mind思维导图工具

Linux系统之安装my-mind思维导图工具 一、my-mind介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查端口占用情况 四、安装httpd4.1 检查本地yum仓库4.2 安装httpd4.3 关闭防火墙和selinux4.4 创建…

C++之atomic_load与atomic_store原子操作实例(一百八十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

4G电力摄像机如何通过AT指令对接到国网平台呢?

对于针对电网安全运行的迫切需求,”输电线路智能可视化监测系统”被研发并应用,通过视频监控和AI智能分析技术,实现了对输电线路远程视频在线监测、外力破坏智能分析,可实现对输电线路的全天候实时监测和预警,有效保障…

【新知测评实验室】解谜扫描全能王——“智能高清滤镜”黑科技

目录 一、“智能高清滤镜” 原理分析1.1、智能扫描引擎AI-Scan功能拆解1.1.1、**图像感知**1.1.2、场景化决策 1.2、版面还原与识别技术分析1.2.1、元素检测和识别1.2.2、元素聚合1.2.3、版面识别 二、深度测评——“智能高清滤镜”功能2.1、图像处理方面2.2、摩尔纹去除方面2.…

五分钟搭建生鲜蔬果小程序

如今,随着移动互联网的快速发展,小程序已经成为众多企业和商家推广产品和服务的重要工具。而生鲜蔬果行业作为一个常见的消费领域,也开始逐渐转向小程序商城来进行销售和服务。那么,如何从零开始搭建一个生鲜蔬果小程序商城呢&…

电力应用 | Intewell操作系统新疆特变项目应用案例

近日,科东软件Intewell操作系统在新疆特变项目成功应用,该方案保障了变电站的电力设备在高电压下稳定运行,实现变电站的智能化控制,极大程度上节省了人力、物力和财力资源;可实时监控电力设备的异常情况,及…

【MT32F006】MT32F006之PWM控制RGB背光灯

本文最后修改时间:2023年06月07日 一、本节简介 本文介绍如何使用MT32F006使用PWM控制RGB灯显示白光,再加上扩散膜、导光板、反光纸、遮光纸,即可作为LCD的背光。 二、实验平台 库版本:V1.0.0 编译软件:MDK5.37 硬…

【24择校指南】齐鲁工业大学计算机考研考情分析

齐鲁工业大学 考研难度(☆) 内容:23考情概况(拟录取和复试分析)、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文1140字,预计阅读:3分钟。 2023考情概况 齐鲁工…

将eNSP Pro部署在华为云是什么体验

eNSP Pro简介 eNSP Pro 是华为公司数据通信产品线新推出的数通设备模拟器,主要应用在数据通信技能培训,为使用者提供华为数据通信产品设备命令行学习环境。 具备的能力 多产品模拟能力:支持数据通信产品线NE路由器、CE交换机、S交换机、AR…

Streamlit 讲解专栏(十):数据可视化-图表绘制详解(上)

文章目录 1 前言2 st.line_chart:绘制线状图3 st.area_chart:绘制面积图4 st.bar_chart:绘制柱状图5 st.pyplot:绘制自定义图表6 结语 1 前言 在数据可视化的世界中,绘制清晰、易于理解的图表是非常关键的。Streamlit…

算法笔记:A*算法

A*算法是一种很常用的路径查找和图形遍历算法。它有较好的性能和准确度 1 中心思路 A*算法通过下面这个函数来计算每个节点n的优先级 f(n)g(n)h(n) f(n)是节点n的综合优先级。当选择下一个要遍历的节点时,总会选取综合优先级最高(f(n)值最小&#xff0…

算法通关村第三关【黄金】| 数组元素出现次数问题

1.数字出现的次数超过数组长度的一半 方法一、使用Map键值对来记录每个元素出现的次数&#xff0c;返回次数大于一半的 class Solution {public int majorityElement(int[] nums) {Map<Integer,Integer> map new HashMap<>();for(int i 0;i<nums.length;i){m…

解决跨时区跨语言的国外大文件传输问题

随着信息技术的飞速发展和全球化的深入推进&#xff0c;跨国团队、跨国公司之间的合作变得越来越普遍。在这种背景下&#xff0c;大文件的传输成为了一个经常遇到的挑战。跨语言、跨时区的国外大文件传输&#xff0c;由于涉及到复杂的网络环境、不同国家法律法规等多方面的问题…

苹果iOS16曝出新漏洞:飞行模式下依旧可连接网络

近日&#xff0c;网络安全研究人员发现iOS 16存在一种新的漏洞利用后持久化技术&#xff0c;即使受害者的苹果设备处于离线状态&#xff0c;也可以利用该技术悄无声息地访问该设备。 Jamf Threat Labs 的研究人员 Hu Ke 和 Nir Avraham 在与 The Hacker News 分享的一份报告中…