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

两种方法一句话总结:

方法一,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. 解决win10无法访问共享

    一台win10共享的文件夹,有的电脑是可以访问的,我的win10 访问不了,说什么 遇到未知错误,用以下方法得以解决 ----------------------------------------- ...

  2. 通过android studio的gradle强制cmake输出命令详情

    https://stackoverflow.com/questions/43439549/force-cmake-in-verbose-mode-via-gradle-and-the-android- ...

  3. python基础之 列表,元组,字典

    other help(str.strip) #查看是否有返回值以及返回值类型[] :称为索引操作符 1.列表 列表相比字符串来说能存储大量数据的python的基本数据类型,并且也拥有字符串的一些方法( ...

  4. 【Linux】-NO.86.Linux.6.C.1.001-【CentOS 7 Install GCC】-

    1.0.0 Summary Tittle:[Linux]-NO.86.Linux.6.C.1.001-[CentOS 7 Install GCC]- Style:Java Series:Log4j S ...

  5. upload-labs

    upload-labs是一个和sqli-labs类似的靶场平台,只不过是一个专门学习文件上传的.整理的很好,虽然并不能将服务器解析漏洞考虑进去,但毕竟一个靶场不可能多个web容器吧,关键是思路很重要, ...

  6. 蓝桥杯2018 B组 第九题

    #include <bits/stdc++.h> #define M 1005 using namespace std; int n; char map1[M][M]; bool vis[ ...

  7. Python 第五阶段 学习记录之---Django 进阶

    Model 一.创建表 1.基本结构 字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bi ...

  8. java实现zip压缩和解压工具

    引入ant.jar package com.develop.web.util; import java.io.BufferedInputStream; import java.io.File; imp ...

  9. python爬虫——跟踪登录过程以及意外的发现(4)

    新浪微博的消息还是很多的,值得弄个账号去爬.不过都有账号了,还需要特意再搞一个吗? 直接上去跟踪.分别使用www和wap端登录: wap端相对简单,form表单都没有用到前面传的数据.但是我看到表单时 ...

  10. docker安装openwrt镜像(不完美案例)

    镜像从http://downloads.openwrt.org/releases下载 注意选择generic-rootfs.tar.gz这种类型的镜像 使用docker import导入镜像,导入后可 ...