zoukankan      html  css  js  c++  java
  • 关于jdGrid解决异步的问题

    前段时间需要jdGrid表格返回的数据通过非对称解密。第一次尝试我在formatter里把数据解密,然后一直解密不出来,原来AES的非对称加密是异步的,也就是说,在解密的同时表格的数据已经加载完了,所以说这是行不通的。第二个思路就取到返回的数据源,把数据源改造,然后在让列表重新加载。这条思路是行的通。那么,第一步是拿到返回的数据源,需要用到jdGrid自带的loadComplete方法,参数是xhr,这个对象是返回的数据,然后就是异步解密,然后在解密的回调里重新渲染表格。以下是代码。异步的代码是前端同事协助写的,具体为什么这么写原谅我一个后端真的不懂。主要是提供一个解决异步的思虑,其中解密就不给出代码了。

    loadComplete: function(xhr){
                        var obj = xhr.result;
                        //声明新的数组,存放解密后的数据
                        var jieArray = [];
                        //循环数据,逐个解密
                        for(var i = 0; i < obj.length; i++){
                            var o = obj[i];
                            var pwd = o.pwd;
                            p = p.then(jieName(o));
                        }
                        //声明promise对象
                        var p = new Promise(function (resolve) {
                          resolve();
                        })
                        //解合同名称和合同编号
                        function jieName(object) {
                          return function test_() {
                            return new Promise(function (resolve) {
                                window.ETHjiemi(key,object.pwd,function(jiePwd){
                                    //jiePwd 解密后的明文
                                    console.log(jiePwd);
                                    //用随机密码解出合同名称
                                    var name = window.AESjiemi(object.name, jiePwd);
                                    //用随机密码解出合同编号
                                    var number = window.AESjiemi(object.number, jiePwd);
                                    object.name = name;
                                    object.number =number;
                                    jieArray.push(object);
                                    resolve(null);
                                })
                            })
                          }
                        }
                        
                        p.then(function() {
                            xhr.result = jieArray;
                            console.log(xhr);
                            $("#jqGrid").jqGrid('clearGridData');  //清空表格
                            //重新渲染
                            $("#jqGrid")[0].addJSONData(xhr.result);
                        })
                    }

    下面是前端同事发给我的解决异步的代码,希望给不会的盆友一点启示

    var p = new Promise(function (resolve) {
          resolve();
        })
        function test(i) {
          return function test_() {
            return new Promise(function (resolve) {
              setTimeout(function () {
                console.log(i)
                resolve()
              }, 100)
            })
          }
        }
    
       for(var i = 0; i < 10; i++) {
         p =p.then(test(i));
        }
    
        p.then(function() {
          console.log("===<<<done")
        })
    View Code
  • 相关阅读:
    日志管理
    LAMP源码编译安装
    实现LAMP架构
    mariadb-server安装问题(Error: MariaDB-common conflicts with 1:mariadb-libs-5.5.60-1.el7_5.x86_64)
    MySQL之八---Mysql实现数据库主从复制、主主复制、级联复制、半同步复制及复制监控
    httpd-2.4源码编译
    HTTPD之三----HTTPS加密技术及重定向
    HTTPD之二---HTTPD服务详解——httpd的配置文件常见设置
    HTTPD之一---HTTPD服务基础理论
    MySQL的MHA实现高可用性
  • 原文地址:https://www.cnblogs.com/ly-gaoshuaige/p/11950078.html
Copyright © 2011-2022 走看看