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

原文地址:https://www.cnblogs.com/jayinnn/p/9957134.html

时间: 2024-10-13 15:35:22

jQuery中异步问题:数据传递的相关文章

jQuery 中 ajax 提交数据应用的一个小demo

举一个jquery中ajax的应用小 demo 便于以后的更多项目拓展 ,这里要注意的是保存的文件名问题 ... ajax02.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="form&qu

jQuery 中 ajax 请求数据应用的一个小demo

举一个jquery中ajax的应用小 demo 便于以后的更多项目拓展 ,这里要注意的是保存的文件名和文件图片路径问题 ... ajax01.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title> ajax小例子 </title> </head> <body> <!--

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

问题: JQuery中,对于.data([key],[value])函数,当使用其进行数据绑定时,假设要绑定的数据是“引用数据类型”,也就是对象:那么.data函数绑定的是该对象的副本还是该对象的一个引用?下面通过以下小例子来测试下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Test<

asp网络编程:Web程序中网页间数据传递方法小结

我们总是会遇到这样的情况,需要将数值从一个网页传递到另一个网页.在这篇文章中,向你展示了几种从一个网页向另一个网页传递数值的几种方法.在此例子中,创建的网页由一个文本控件和几个按钮控件组成.在文本框中输入的数据通过被标识在按钮控件中的不同方法从一个网页传递到另一个网页. Response.Redirect 让我们首先看一看如何使用Response.Redirect方法传递数据.这是它们之中最简单的方法.在文本框中输入一些数据,并且当你输入完成数据后,按下“Respose.Redirect”按钮.

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

效果图: 一.下载zTree插件 地址:http://www.ztree.me 二.html代码 <link href="../Scripts/zTree/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" /> <script src="../Scripts/zTree/js/jquery-1.4.4.min.js"></script> <script src

layui中从子窗口传递数据到父窗口,第三个子弹层的值传给第二个弹层

最近做一个项目的需要多个弹层,每个弹层中还需要数据传递, 大概如图,看图自己应该明白 如何在在b页面选择好的值传给a页面的问题,这个问题我百度了好久都没有解决 后来参考了文档 http://fuxiao.io/practice/docs/#/layui/layer/iframes 加上自己理会,终于解决问题了,这个文档看了好几次还是不太明白(个人理解能力差),后来加班自己边动手边理解,解决问题了 上代码 主页面(top.html)的代码 <!DOCTYPE html> <html lan

ionic中将service中异步返回的数据赋值给controller的$scope

1.service中异步获取数据实例 angular.module('starter.services', []) .factory('Chats', function($http,$q) {//定义Chats的service return { all: function() {//all方法异步获取数据 var deferred=$q.defer(); //定义deferred var promise=deferred.promise;//定义promise $http.get('http:/

Ajax在jQuery中的应用(加载异步数据、请求服务器数据)

加载异步数据 jQuery中的load()方法 load(url,[data],[callback]) url:被加载的页面地址 [data]:可选项表示发送到服务器的数据,其格式为 key/value . [callback]:可选项表示加载成功后,返回至加载页的回调函数. 全局函数 getJSON() $.getJSON(url,[data],[callback]) <div class="container col-lg-12"> <div style=&quo

JQuery中使用FormData异步提交数据和提交文件

web中数据提交事件是常常发生的,但是大多数情况下我们不希望使用html中的form表单提交,因为form表单提交会中断当前浏览器的操作并且会调到另一个地址(即使这个地址是当前页面),并且会重复加载一些html浪费带宽,我们希望达到一个无刷新的.异步的提交效果来给用户更好的体验,这时候就要使用ajax,ajax可以不依赖表单自行发起一次http请求并且取回服务器响应的数据,这就是ajax的简便之处.我们这里使用JQuery中封装好的ajax函数,更加简便.下面列举几个使用ajax异步提交数据的方