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
  • 相关阅读:
    为什么包含多句代码的宏要用do while包括起来?
    Android之JUnit深入浅出
    android unit test
    dlopen,dlsym的问题,实在搞不明白了。
    pthread多线程学习笔记五条件变量2使用
    posix多线程程序使用条件变量的一个常见bug
    Android Bitmap和Canvas学习笔记
    c++filt
    pthread_cond_signal只能唤醒已经处于pthread_cond_wait的线程
    百度知道推广技巧大全
  • 原文地址:https://www.cnblogs.com/ly-gaoshuaige/p/11950078.html
Copyright © 2011-2022 走看看