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 ...
随机推荐
- Oracle不连续的值,如何实现查找上一条、下一条
1. 遇到的问题 已知一个题库,希望实现当前页切换上一题,下一题的需求. 查看得知,数据库中用于查询的字段(主键)是不连续的.如上图所示:stxh为主键number类型. 2. 实现方式lead ...
- 唯美MACD-完全版
前言: 自己很喜欢MACD这个指标,因为很欠缺所以就搜集的多一点,有人问,学习缠为什么还这么搜集些Macd的资料呢?因为在分析走势(或盘整背驰.或趋势背驰)的时候我的习惯使用Macd做辅助判断,所以M ...
- 004-mac下Java6与Java8 安装
一.Java6安装 官方下载下载地址:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-down ...
- Java-idea-常用插件
一.插件安装 settings→plugins→直接搜索框搜索,没有选择Browse Respositories→找到需要安装的插件,install即可 二.常用插件 插件名称 简介 地址 备注 ...
- 家庭记账本之微信小程序(三)
继上篇注册阶段后,经过查阅资料学习后,以下介绍开发阶段 1.登录微信公众平台就能在菜单“开发”---“基本配置”中看到小程序的AppID了. 小程序的 AppID 相当于小程序平台的一个身份证,后续你 ...
- Streaming从Spark2X迁移到Spark1.5 summary
配置文件的加载是一个难点,在local模式下非常容易,但是submit后一直报找不到文件,后来采用将properties文件放在加载类同一个package下,打包到同一个jar中解决. import ...
- Java中常见的异常处理汇总
1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的 ...
- vue scoped 深度作用选择器
如果你希望 scoped 样式中的一个选择器能够作用得“更深”,例如影响子组件,你可以使用 >>> 操作符: <style scoped> .a >>> ...
- go get Unknown SSL protocol error in connection to gopkg.in
OSX go get报错 go get Unknown SSL protocol error in connection to gopkg.in https://github.com/niemeyer ...
- 利用“Java同包同名类执行顺序”取消Java 网站应用程序Licence验证
如果是在tomcat里运行,lib目录下一大堆的JAR包,不同的JAR包里可能会有相同的包名类名,JRE按照JAR名字的字母顺序加载JAR文件,同名类如果已加载,则后面的同名类会忽略. 公司购买的一款 ...