zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    effective c++ 条款10 让operator= 返回*this的引用
    基于vs2008的opengl开发环境的配置
    effective c++ 条款13 以对象管理资源
    effective C++ 条款06如果你不想让编译器为你生成函数就应该明确拒绝
    effective c++条款07为多态基类声明为virtual析构函数
    effective c++条款08别让异常逃离析构函数
    effective c++条款11 在operator=中处理“自我赋值”
    ubuntu 下的截图工具
    effective c++ 条款12 赋值对象时勿忘其每一个成员
    [linux 安装]修改centos的yum源
  • 原文地址:https://www.cnblogs.com/jayinnn/p/9957134.html
Copyright © 2011-2022 走看看