首页 > 其他分享 >js给同一组件同一请求的调用加锁

js给同一组件同一请求的调用加锁

时间:2024-11-18 16:21:33浏览次数:1  
标签:code const ocrServerConfigDetail 同一 js 加锁 error message data

我开发的一个页面,同时多次使用了同一个组件,但是这个组件一加载就会调用同一个方法,最终同时调用同一接口。

但是我们后端对于同一接口的调用频率进行了限制,不允许短时间内重复提交,需要在一个时间间隔后提交才能请求成功。

原代码为:

onMounted(() => {
  const code = item.value.code;
  ocrServerConfigDetail(code);
});

const ocrServerConfigDetail = (code) => {
  return new Promise((resolve, reject) => {
    TaskApi.ocrServerConfigDetail({
      code,
    })
      .then((res) => {
        const data = res.data;
        if (data.code === 200) {
          if (data.data) {
            item.value.paramList = data.data.paramList;
          }
        } else {
          Toast.fail(data.message);
          reject();
        }
      })
      .catch((error) => {
        if (error.message !== "") {
          Toast.fail(error.message);
        }
        reject(error);
      });
  });
};

我采用加锁方式解决这个问题,使用sessionStorage进行全局的锁存储。

新代码为:

onMounted(() => {
  const code = item.value.code;
  ocrServerConfigDetailAddLock(code);
});

const ocrServerConfigDetailAddLock = (code) => {
  if (sessionStorage.isOCRLocked == 1) {
    setTimeout(() => {
      ocrServerConfigDetailAddLock(code);
    }, 600);
  } else {
    if (code) {
      ocrServerConfigDetail(code);
      console.log(code);
    }
  }
};

const ocrServerConfigDetail = (code) => {
  sessionStorage.isOCRLocked = 1;
  return new Promise((resolve, reject) => {
    TaskApi.ocrServerConfigDetail({
      code,
    })
      .then((res) => {
        const data = res.data;
        if (data.code === 200) {
          if (data.data) {
            item.value.paramList = data.data.paramList;
          }
        } else {
          Toast.fail(data.message);
          reject();
        }
      })
      .catch((error) => {
        if (error.message !== "") {
          Toast.fail(error.message);
        }
        reject(error);
      })
      .finally(() => {
        sessionStorage.isOCRLocked = 0;
      });
  });
};

 

标签:code,const,ocrServerConfigDetail,同一,js,加锁,error,message,data
From: https://www.cnblogs.com/luoyihao/p/18552915

相关文章

  • H.265流媒体播放器EasyPlayer.js无插件H5播放器关于页面首次加载超时检测
    EasyPlayer.js网页直播/点播播放器是TSINGSEE青犀流媒体组件系列中关注度较高的产品,经过多年的发展和迭代,目前已经有多个应用版本,包括RTSP版、RTMP版、Pro版以及js版,其中js版本作为网页播放器,受到了用户的广泛使用。在功能上,EasyPlayer.js播放器支持直播、点播、录像、快照截图......
  • Three.js中实现雾效的方法
    在Three.js中,可以使用Fog或FogExp2类来实现场景中的雾效。Fog类创建的是线性雾效,而FogExp2类创建的是指数雾效。两者都会根据物体与相机的距离来增加雾的密度,从而实现不同的视觉效果。1.Fog(线性雾)Fog类创建的是线性雾效,其中雾的密度随距离线性增长。Fog类的构造函数接受三......
  • 【JS逆向百例】cebupacificair 航空逆向分析
    前言近期在知识星球中,有位星友在逆向一个航司的时候,遇到了点阻碍,向我提问,本期就对该网站进行逆向分析:逆向目标目标:cebupacificair航空查询逆向分析网站:aHR0cHM6Ly93d3cuY2VidXBhY2lmaWNhaXIuY29tL2VuLVBILw==抓包分析打开网站,找到返回机票信息的机票查询接口ceb-omnix_p......
  • 基于node.js毕设企业人力资源管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于企业人力资源管理系统的研究,现有研究主要集中在通用的人力资源管理流程及模块功能优化等方面,专门针对企业人力资源管理系统中多维度功能(如员工、部......
  • 基于node.js毕设企业人力资源管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于企业人力资源管理系统的研究,现有研究主要以人力资源管理的一般性理论和传统管理模式为主。专门针对涵盖用户、员工、经理等多角色以及转岗、员工积......
  • 基于node.js毕设企业人力资源管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景随着企业规模的不断扩大和管理的日益复杂,人力资源管理的高效性和精准性成为企业发展的关键因素之一。在国内外,关于企业人力资源管理系统的研究已经取得......
  • 网页直播/点播播放器EasyPlayer.js RTSP播放器关于硬解码或者video标签渲染自动播放
    EasyPlayer.jsRTSP播放器是一个基于WebRTC(网页实时通信技术)的开源JavaScript库,主要用于在网页上实现视频播放功能,特别是针对RTSP(RealTimeStreamingProtocol,实时流协议)流的播放。它允许开发者在不需要安装额外插件或软件的情况下,直接在网页中嵌入和播放来自监控摄像头或其他R......
  • node.js毕设游戏攻略资讯补丁售卖系统(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于游戏攻略资讯补丁售卖系统的研究,现有研究主要以游戏的开发、运营为主,专门针对游戏攻略资讯补丁售卖系统的研究较少。在国内外游戏产业蓬勃发展的当......
  • node.js毕设生活垃圾识别与处理系统(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于生活垃圾识别与处理系统的研究,现有研究主要以垃圾的单一处理环节(如仅分类或仅处理技术)为主,专门针对集成识别与处理且结合用户激励机制(如积分奖励等......
  • vue+mockjs数据
    参考链接:https://blog.csdn.net/qi8023for/article/details/127618742=========第一种方法MSW:使用VueCLI的mock-server1、安装MSWnpminstallmsw2、工程下创建一个mocks文件夹和handlers.js和browser.js文件handlers.js定义MOCKAPI行为:import{rest}from'msw'ex......