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 ...
随机推荐
- Linux下配置Redis集群模式
配置机器1 在演示中,172.16.179.130为当前ubuntu机器的ip 在172.16.179.130上进⼊Desktop⽬录,创建conf⽬录 在conf⽬录下创建⽂件7000.conf,编 ...
- bugfree3.0.1-导入excel测试用例
大多数项目里只用BugFree做缺陷管理工具,其实还可以通过该工具导入测试用例,记录测试结果,最后获得统计结果. 难点 1.导入文件要求XML格式: 2.一般我们的测试用例都是用excle文件存取,很 ...
- xshell 6评估已过期解决办法 / xftp 6 评估已过期解决办法
1.工具用途介绍 Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议.Xshell 通过互联网到远程主机的安全 ...
- vue的install
将$platform挂载到Vue.prototype下面,this里面的内容就是$platform里面的东西 Vue.prototype.$platform = this 在chrome开发者工具下的 ...
- 69A
#include <stdio.h> int main() { int n; int sum1=0, sum2=0, sum3=0; int x, y, z; scanf("%d ...
- 解决Windows下文件在Linux下打开出现乱码的问题
目录 问题 原理 解决 总结 参考资料 问题 前几天生病了,Java一直在看代码但是没跟着打,于是决定偷一波小小的懒,直接把教材的代码从Windows通过共享文件夹放到了Linux里面.但是编译的时候 ...
- Android adt-bundle 开发环境的搭建_Linuxs
本文完全是拷贝的: https://www.jb51.net/article/87957.htm 的文章, 有需要请看原文, 拷贝仅用于学习记录. 本文与<利用adt-bundle轻松搭建An ...
- Java课程总结
预备作业一 简要内容:我期望的师生关系 预备作业二 简要内容:学习基础和C语言基础调查 预备作业三 简要内容:Linux安装及学习 第一周作业 简要内容:Java入门 第二周作业 简要内容:学习基本数 ...
- 转:在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档
在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档 一直以来,我都想为 PDF 补丁丁添加一个 PDF 渲染引擎.可是,目前并没有可以在 .NET 框架上运行的免费 PDF ...
- docker基本部署
一.基本概念docker 1.镜像(Image) Docker 镜像就是一个只读的模板. 例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用 ...