现在我有三个代码块,分别都调用了同一个接口使用相同的数据,请问怎么精简代码,让他只调用一次接口,将数据存储起来让其他函数共同使用.

问题描述:

现在我有三个代码块:
一: const getData = async () => {console.log('触发了getData接口')let resultData = await getActivityInfo(activityId);console.log(resultData,'resultData')let id = resultData.id;let shareImg = resultData.shareImglet shareSubtitle = resultData.shareSubtitlelet shareTitle = resultData.shareTitleconsole.log(id,shareImg,shareSubtitle,shareTitle,'-')return {id,shareImg,shareSubtitle,shareTitle}
}
二: // 测试函数
const getDataAndLog = async () => {const {id, shareImg, shareSubtitle, shareTitle} = await getData();console.log(id, shareImg, shareSubtitle, shareTitle, '?-');var htmlCode = `<div style="display:none" id="__cxnewsapp_topbar">分享按钮是否显示的标志</div><div style="display:none" id="__cxnewsapp_orientation">flexible</div><div style="display:none" id="__cxnewsapp_sharetext">${shareSubtitle}</div><div style="display:none" id="__cxnewsapp_sharephotourl">${shareImg}</div><div style="display:none" id="__cxnewsapp_sharewxurl"></div><div style="display:none" id="__cxnewsapp_sharewxthumburl"></div><div style="display:none" id="__cxnewsapp_sharewxtitle">${shareTitle}</div><div style="display:none" id="__cxnewsapp_sharewxtext">${shareSubtitle}</div>`;var range = document.createRange(); // 创建一个新的Range对象range.selectNode(document.body); // 将Range对象选中整个<body>节点var fragment = range.createContextualFragment(htmlCode); // 将HTML代码转换成DOM节点对象document.documentElement.appendChild(fragment); // 将DOM节点对象添加到<body>节点的底部}getDataAndLog();三: // 分享按钮
const shareDialog = async () => {console.log('点击了分享按钮')if (isInGenerated()) {// 注释登录判断 不登陆也可以分享// if (!checkLogin()) {//   login()//   return// }// 判断是不是财新appif (getCookie('appType')) {const res = await getData()const {id,shareImg,shareSubtitle,shareTitle} = resconsole.log(id,shareImg,shareSubtitle,shareTitle,'id,shareImg,shareSubtitle,shareTitle')
这三个代码块调用了两次getActivityInfo(activityId);这个接口,重复调用了,怎么简化代码

我希望实现的思路:

let id,shareImg,shareSubtitle,shareTitle;
const getData = async () => {console.log('触发了getData接口')let resultData = await getActivityInfo(activityId);console.log(resultData,'resultData')id = resultData.id;shareImg = resultData.shareImgshareSubtitle = resultData.shareSubtitleshareTitle = resultData.shareTitleconsole.log(id,shareImg,shareSubtitle,shareTitle,'-')return {id,shareImg,shareSubtitle,shareTitle}
}
getData()// 测试函数
const getDataAndLog = () => {console.log(id, shareImg, shareSubtitle, shareTitle, '?-');var htmlCode = `<div style="display:none" id="__cxnewsapp_topbar">分享按钮是否显示的标志</div><div style="display:none" id="__cxnewsapp_orientation">flexible</div><div style="display:none" id="__cxnewsapp_sharetext">${shareSubtitle}</div><div style="display:none" id="__cxnewsapp_sharephotourl">${shareImg}</div><div style="display:none" id="__cxnewsapp_sharewxurl"></div><div style="display:none" id="__cxnewsapp_sharewxthumburl"></div><div style="display:none" id="__cxnewsapp_sharewxtitle">${shareTitle}</div><div style="display:none" id="__cxnewsapp_sharewxtext">${shareSubtitle}</div>`;var range = document.createRange(); // 创建一个新的Range对象range.selectNode(document.body); // 将Range对象选中整个<body>节点var fragment = range.createContextualFragment(htmlCode); // 将HTML代码转换成DOM节点对象document.documentElement.appendChild(fragment); // 将DOM节点对象添加到<body>节点的底部}我现在希望实现:在最外层定义id,shareImg,shareSubtitle,shareTitle;然后通过getData函数获取到这几个值,后面的getDataAndLog函数可以直接用最外层的id,shareImg,shareSubtitle,shareTitle值,而不需要再次通过异步调用接口去获取,怎么写?

GPT回答:

要实现在最外层定义变量并在getData函数中获取其值,然后在getDataAndLog函数中使用这些值,您可以将getData函数返回的数据存储在全局变量中。这样,在getDataAndLog函数中就可以直接使用这些全局变量的值,而无需再次调用异步接口获取数据。以下是修改后的代码示例:let id, shareImg, shareSubtitle, shareTitle;const getData = async () =&gt {console.log('触发了getData接口');let resultData = await getActivityInfo(activityId);console.log(resultData, 'resultData');id = resultData.id;shareImg = resultData.shareImg;shareSubtitle = resultData.shareSubtitle;shareTitle = resultData.shareTitle;console.log(id, shareImg, shareSubtitle, shareTitle, '-');return { id, shareImg, shareSubtitle, shareTitle };
};async function init() {await getData();getDataAndLog();
}init();// 测试函数
const getDataAndLog = () =&gt {console.log(id, shareImg, shareSubtitle, shareTitle, '?-');var htmlCode = `&ltdiv style="display:none" id="__cxnewsapp_topbar"&gt分享按钮是否显示的标志&lt/div&gt&ltdiv style="display:none" id="__cxnewsapp_orientation"&gtflexible&lt/div&gt&ltdiv style="display:none" id="__cxnewsapp_sharetext"&gt${shareSubtitle}&lt/div&gt&ltdiv style="display:none" id="__cxnewsapp_sharephotourl"&gt${shareImg}&lt/div&gt&ltdiv style="display:none" id="__cxnewsapp_sharewxurl"&gt&lt/div&gt&ltdiv style="display:none" id="__cxnewsapp_sharewxthumburl"&gt&lt/div&gt&ltdiv style="display:none" id="__cxnewsapp_sharewxtitle"&gt${shareTitle}&lt/div&gt&ltdiv style="display:none" id="__cxnewsapp_sharewxtext"&gt${shareSubtitle}&lt/div&gt`;var range = document.createRange(); // 创建一个新的Range对象range.selectNode(document.body); // 将Range对象选中整个&ltbody&gt节点var fragment = range.createContextualFragment(htmlCode); // 将HTML代码转换成DOM节点对象document.documentElement.appendChild(fragment); // 将DOM节点对象添加到&ltbody&gt节点的底部
};在上述代码中,我们创建了一个名为`init`的新函数。在该函数中,我们首先调用`await getData()`来获取数据并将其存储在全局变量中,然后再调用`getDataAndLog()`函数来使用这些全局变量的值。最后,我们在全局作用域中调用`init()`函数来执行这些操作。请注意,在使用全局变量时应小心,确保在正确的时机获取数据并避免出现竞态条件或不一致的情况。

接下来的疑问:

回答:

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

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

相关文章

JWT(JSON Web Token)详解以及在go-zero中配置的方法

目的 对用户进行身份认证和信息交换 RFC 7519 传统方式 通过session保存对话信息&#xff0c;服务端返回一个session id&#xff0c;用户保存这个id在cookie内&#xff0c;然后每次请求都传给服务端 局限性 对于服务器集群难以向每个服务器共享同一session jwt的方式是…

备战蓝桥杯---数据结构与STL应用(基础实战篇1)

话不多说&#xff0c;直接上题&#xff1a; 当然我们可以用队列&#xff0c;但是其插入复杂度为N,总的复杂度为n^2,肯定会超时&#xff0c;于是我们可以用链表来写&#xff0c;同时把其存在数组中&#xff0c;这样节点的访问复杂度也为o(1).下面是AC代码&#xff1a; 下面我们来…

学习MySQL仅此一篇就够了(视图)

视图 介绍及基本语法 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自定义视 图的查询中使用的表&#xff0c;并且是在使用视图时动态生成的。 通俗的讲&#xff0c;视图只保存了查询的SQL逻辑&#xf…

我在代码随想录|写代码Day20之二叉树-700. 二叉搜索树中的搜索,98. 验证二叉搜索树,530.二叉搜索树的最小绝对差

学习目标&#xff1a; 博主介绍: 27dCnc 专题 : 数据结构帮助小白快速入门 &#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d; ☆*: .&#xff61;. o(≧▽≦)…

TypeScript(八) number和string

1. TypeScript number 1.1. 描述 Number对象是原始数值的包装对象。 1.2.语法 var num new Number(value);;注意&#xff1a;如果一个参数值不能转换为一个数字&#xff0c;将返回NaN&#xff08;非数字值&#xff09;。 1.3. 对象属性 属性描述MAX_VALUE可表示的最大的数…

深度学习-搭建Colab环境

Google Colab(Colaboratory) 是一个免费的云端环境&#xff0c;旨在帮助开发者和研究人员轻松进行机器学习和数据科学工作。它提供了许多优势&#xff0c;使得编写、执行和共享代码变得更加简单和高效。Colab 在云端提供了预配置的环境&#xff0c;可以直接开始编写代码&#x…

【CMU-自主导航与规划】Autonomous Exploration Development Environment 配置与运行

官方文档&#xff1a;https://www.cmu-exploration.com/ 一、安装与配置&#xff1a; 适用版本&#xff1a; Ubuntu 18.04 ROS Melodic and Ubuntu 20.04 with ROS Noetic. 如果使用 Ubuntu 22.04 with ROS2 Humble, 则需要配置ROS2【https://drive.google.com/file/d/1a01RS…

鸿蒙新风口,湖南码牛助你高薪起飞!

去年9月底&#xff0c;在华为秋季全场景新品发布会上&#xff0c;华为常务董事、终端BG CEO余承东宣布&#xff0c;鸿蒙原生应用全面启动&#xff0c;HarmonyOS NEXT开发者预览版将在2024年第一季度开放。 HarmonyOS 2019年正式面世&#xff0c;至今已成长了4年&#xff0c;截至…

86.网游逆向分析与插件开发-物品使用-物品丢弃的逆向分析与C++代码的封装

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;物品使用的逆向分析与C代码的封装-CSDN博客 码云地址&#xff08;ui显示角色数据 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;7563f86877c…

2023年春秋杯网络安全联赛冬季赛_做题记录

可信计算 基于挑战码的双向认证1 可信计算赛题-双向认证挑战模式.docx 使用命令进行SSH登录上去 ssh player8.147.131.156 -p 18341 # 记得加上-p参数指定端口&#xff0c;不然默认的是22端口看见word文档的提示&#xff0c;先尝试一下 直接获得了flag1 web 魔术方…

基于视觉的移载协作机器人机床上下料末端纠偏算法

摘 要 针对复合机器人在机床上下料中的定位方法,本文主要关注识别机床卡盘和末端作业面的定位。首先分 析了复合机器人在机床上下料过程中的工作原理及其基本结构,包括 AGV (自动导引车)和协作机器人 的功能及特点。然后,详细阐述了如何使用视觉系统和纠偏算法来…

电动汽车|不同类型电动汽车充电负荷蒙特卡洛法模拟研究(包括常规充电、快速充电、更换电池)

目录 主要内容 结果一览 常规充电 快速充电 更换电池 详实文档资料 下载链接 主要内容 本程序采用蒙特卡洛模拟了不同类型电动汽车充电负荷特点&#xff0c;包括常规充电、快速充电和更换电池三种。 充放电行为分为无序充电行为、受控充电行为和受控充放电行为…