最近写一个新页面,涉及到异步问题,为了获得异步过程中的数据,以下分享两种方法;

两种方法一句话总结:

方法一,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中异步问题:数据传递的更多相关文章

  1. React中父子组件数据传递

    Vue.js中父子组件数据传递:Props Down ,  Events Up Angular中父子组件数据传递:Props Down,  Events  Up React中父子组件数据传递:Prop ...

  2. echarts异步数据加载(在下拉框选择事件中异步更新数据)

    接触echarts 大半年了,从不会到熟练也做过不少的图表,隔了一段时间没使用这玩意,好多东西真心容易忘了.在接触echarts这期间也没有总结什么东西,今天我就来总结一下如何在echart中异步加载 ...

  3. jQuery中异步请求

    1.load方法 使用load()方法通过Ajax请求加载服务器中的数据,并把返回的数据放置到指定的元素中,它的调用格式为: $(selector).load(URL,data,callback); ...

  4. SpringMVC+Jquery -页面异步载入数据

    背景: 做项目时涉及到页面.当我打算在controller中传一个list到页面,然后通过<c:foreach>循环遍历出来时,同事说:你这样每次都要刷新.这都是几百年前使用的技术了.你用 ...

  5. 关于JQuery中$.data绑定数据原理或逻辑

    问题: JQuery中,对于.data([key],[value])函数,当使用其进行数据绑定时,假设要绑定的数据是“引用数据类型”,也就是对象:那么.data函数绑定的是该对象的副本还是该对象的一个 ...

  6. Java WEB中的HttpServletResponse数据传递

    1.什么是HttpServletResponse 2.使用HttpServletResponse向浏览器发送数据及相关实例. 实例1:实现文件下载功能 实例2:实现验证码注册 实例3:实现页面3秒后跳 ...

  7. jquery中ajax向action传递对象参数,json ,spring注入对象

    首先,我这个程序的框架是spring+struts2+hibernate. 后端的action的需要接受从前端传进来的参数,由spring的注入,可知,如果前端用的是form的话,只需要在每个inpu ...

  8. react+dva 全局model中异步获取数据state在组件中取不到值

    先上结论,不是取不到,是写法有问题. 全文分4部分,1是问题描述,2是一开始的解决想法(错误做法),3是问题产生原因的思考,4是正常解决方法.只想看结论直接跳4 1.问题描述 接触react dva一 ...

  9. bootstrap jQuery Ztree异步载入数据,check选择&amp;可加入、改动、删除节点

    效果图: 一.下载zTree插件 地址:http://www.ztree.me 二.html代码 <link href="../Scripts/zTree/css/zTreeStyle ...

随机推荐

  1. day5_函数返回值

    每个函数都有返回值,如果没有在函数里面指定返回值的话,在python里面函数执行完之后,默认会返回一个None,函数也可以有多个返回值,如果有多个返回值的话,会把返回值都放到一个元组中,返回的是一个元 ...

  2. linux c生成唯一文件名称

    linux c生成唯一文件名称可用mktemp()或mkstemp()函数

  3. Linux Input子系统

    先贴代码: //input.c int input_register_handler(struct input_handler *handler) { //此处省略很多代码 list_for_each ...

  4. 本地node启动服务步骤

    启动node服务: 1.git bash here (node server-run.js) 2.如果第一次启动node服务,要根据提示装依赖文件npm install 依赖文件名 3.启动成功提示: ...

  5. Ansible学习实战手记-你想要知道的可能都在这里了

    最近接触了ansible工具,查找了一些资料,也做了一些总结.希望能给刚接触的新手带来一些帮助. 此总结有实际例子,大部分也是从实践中用到才逐一总结的. 当然可能肯定一定会存在一些错误和纰漏,还望大家 ...

  6. Unity之获取资源包的路径

    先从缓存中获取,如果获取不到,则从包中获取. 如下: public static string GetAssetBundlePath(string path) { // 先尝试从 persist 目录 ...

  7. C++ Const指针

  8. MongoDB 之 你得知道MongoDB是个什么鬼 MongoDB - 1

    最近有太多的同学向我提起MongoDB,想要学习MongoDB,还不知道MongoDB到底是什么鬼,或者说,知道是数据库,知道是文件型数据库,但是不知道怎么来用 那么好,所谓千呼万唤始出来,现在我就拉 ...

  9. java static语句的总结

    static 是静态方法,他的引用不需要对象,可以使用类名直接进行引用,当然也不需要this.      由于不需要对象,所以static方法内无法调用非static的方法或对象   至于为什么mai ...

  10. ci 配置ckeditor + ckfinder 无图片上传按钮

    一:配置路径有问题 {$base_url}assets/js/editor/ckfinder/ckfinder.html  --> http://www.cnblogs.com/assets/j ...