jQuery中异步问题:数据传递
最近写一个新页面,涉及到异步问题,为了获得异步过程中的数据,以下分享两种方法;
两种方法一句话总结:
方法一,Http请求后调用.then实现response的数据同步,然后根据resp接着处理;
方法二,使用ES6中的Promise语法糖,实现异步等待resp;
方法一的代码:
其中invokeJsonRpc(RDS_CONFIG.APOLLO_CMDB_ENDPOINT_V3, "query.aggregate", queryParams)会发生一次HTTP请求
$("#submitFlushAll").on("click",function () {
let clusterId = $("#cluster-id").val();
const queryParams = {
graph: `graph g { redisCluster: RedisCluster[ id = "${clusterId}" ];}`,
fields: [["redisCluster.name", "redisCluster.id", "redisCluster.used_memory"]]
};
invokeJsonRpc(RDS_CONFIG.APOLLO_CMDB_ENDPOINT_V3, "query.aggregate", queryParams).then(resp =>{
let usedMemory = resp.result.children[0].data["redisCluster.used_memory"];
let clusterName = $("#cluster-name").val();
let details = {
usedMemory : usedMemory,
clusterName : clusterName,
};
let request = {
title: `Redis清除${clusterName}的所有数据`,
applicant: $("#username").val(),
projectId: Number($("#project-id").val()),
createTime: moment().format("YYYY-MM-DD HH:mm:ss"),
resourceType: REDIS_JIGSAW_RESOURCE_TYPE,
operationType: "redis_flush_all",
resource: Number($("#resource-id").val()),
sensitive: false,
audit: true,
carbonCopy: null,
details: JSON.stringify(details),
extension: null
};
submitJigsawWorkorder(request);
});
方法二的代码:
注意Promise容器的构造,以及点击事件的处理函数为异步;
$("#submitFlushDatabase").on("click", async function () {
let clusterId = $("#cluster-id").val();
let usedMemoryPromise = fetchUsedMemeory(clusterId);
let usedMemory = await Promise.all([usedMemoryPromise]);
let databaseNumber = $("#inputDatabaseNumber").val();
let clusterName = $("#cluster-name").val();
let details = {
databaseNumber : databaseNumber,
clusterName : clusterName,
usedMemory : usedMemory,
};
let request = {
title: `Redis清除指定DB,指定DB:${databaseNumber}`,
applicant: $("#username").val(),
projectId: Number($("#project-id").val()),
createTime: moment().format("YYYY-MM-DD HH:mm:ss"),
resourceType: REDIS_JIGSAW_RESOURCE_TYPE,
operationType: "redis_flush_database",
resource: Number($("#resource-id").val()),
sensitive: false,
audit: true,
carbonCopy: null,
details: JSON.stringify(details),
extension: null
};
submitJigsawWorkorder(request);
});
async function fetchUsedMemeory(clusterId) {
const queryParams = {
graph: `graph g { redisCluster: RedisCluster[ id = "${clusterId}" ];}`,
fields: [["redisCluster.name", "redisCluster.id", "redisCluster.used_memory"]]
};
let resp = await invokeJsonRpc(RDS_CONFIG.APOLLO_CMDB_ENDPOINT_V3, "query.aggregate", queryParams);
let usedMemory = resp.result.children[0].data["redisCluster.used_memory"];
return usedMemory;
}
两种方法的比较:使用Promise语法糖会使得代码结构性更加清晰,易读。
Promise学习可以参考这个链接:https://blog.csdn.net/major_zhang/article/details/79154287
jQuery中异步问题:数据传递的更多相关文章
- React中父子组件数据传递
Vue.js中父子组件数据传递:Props Down , Events Up Angular中父子组件数据传递:Props Down, Events Up React中父子组件数据传递:Prop ...
- echarts异步数据加载(在下拉框选择事件中异步更新数据)
接触echarts 大半年了,从不会到熟练也做过不少的图表,隔了一段时间没使用这玩意,好多东西真心容易忘了.在接触echarts这期间也没有总结什么东西,今天我就来总结一下如何在echart中异步加载 ...
- jQuery中异步请求
1.load方法 使用load()方法通过Ajax请求加载服务器中的数据,并把返回的数据放置到指定的元素中,它的调用格式为: $(selector).load(URL,data,callback); ...
- SpringMVC+Jquery -页面异步载入数据
背景: 做项目时涉及到页面.当我打算在controller中传一个list到页面,然后通过<c:foreach>循环遍历出来时,同事说:你这样每次都要刷新.这都是几百年前使用的技术了.你用 ...
- 关于JQuery中$.data绑定数据原理或逻辑
问题: JQuery中,对于.data([key],[value])函数,当使用其进行数据绑定时,假设要绑定的数据是“引用数据类型”,也就是对象:那么.data函数绑定的是该对象的副本还是该对象的一个 ...
- Java WEB中的HttpServletResponse数据传递
1.什么是HttpServletResponse 2.使用HttpServletResponse向浏览器发送数据及相关实例. 实例1:实现文件下载功能 实例2:实现验证码注册 实例3:实现页面3秒后跳 ...
- jquery中ajax向action传递对象参数,json ,spring注入对象
首先,我这个程序的框架是spring+struts2+hibernate. 后端的action的需要接受从前端传进来的参数,由spring的注入,可知,如果前端用的是form的话,只需要在每个inpu ...
- react+dva 全局model中异步获取数据state在组件中取不到值
先上结论,不是取不到,是写法有问题. 全文分4部分,1是问题描述,2是一开始的解决想法(错误做法),3是问题产生原因的思考,4是正常解决方法.只想看结论直接跳4 1.问题描述 接触react dva一 ...
- bootstrap jQuery Ztree异步载入数据,check选择&可加入、改动、删除节点
效果图: 一.下载zTree插件 地址:http://www.ztree.me 二.html代码 <link href="../Scripts/zTree/css/zTreeStyle ...
随机推荐
- int bool 字符串 列表 字典 集合
1.int和bool 输出i的最大二进制位数inti = 1000 print(i.bit_length()) 2. str int bool list set dict tuple 相互转换 pr ...
- Mac下搭建solr搜索引擎与PHP扩展开发(上)
首先需要安装jdk,前往 https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html 自 ...
- android studio相关配置
启动出现:Unable to access Android SDK add-on list 解决: Android Studio First Run 检测 Android SDK 及更新,由于众所周知 ...
- python学习之数组二
作用于数组的函数: 通用函数:函数基于元素的,以单元方式作用于数组的,返回的是与原数组具有相同形状的数组. 不通用函数(数组函数):函数能以行或者列的方式作用于整个矩阵:如果没有提供任何参数时,它们将 ...
- #WEB安全基础 : HTTP协议 | 0x3 TCP三次握手和DNS服务
TCP三次握手精准无误地把数据送达目标处,TCP协议把数据包送出去后,向对方确认是否成功发送,握手过程中使用了TCP的标志(flag)——SYN和ACK 请看图 若握手中断,TCP协议再次从同样顺序发 ...
- nginx配置详细解析
转自 http://blog.csdn.net/zhongguozhichuang/article/details/528168871.静态HTTP服务器 首先,Nginx是一个HTTP服务器,可以将 ...
- JavaScript 作用域链其实很简单
概念 作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问.其本质就是一个指向变量对象的指针列表.在js中,当某个函数被调用时,会创建一个执行环境(execution context)及 ...
- c#高级编程第七版 学习笔记 第二章 核心c#
第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用S ...
- 关于mysql触发器和存储过程的理解
内容源自:一篇很棒的 MySQL 触发器学习教程 一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊 ...
- bzoj3437 小P的牧场(斜率优化dp)
3437: 小P的牧场 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2025 Solved: 1110[Submit][Status][Discu ...