记录一个项目中的矛盾
来源:互联网 发布:淘宝新势力周报名入口 编辑:程序博客网 时间:2024/05/01 18:33
背景是这样子的:
页面上个若干个svg节点,要把这些svg变成png发送到后台插入word中
解决方案:遍历这些svg节点,利用saveSvgAsPng脚本,把这些svg转化为pngUri并放到一个数组中,然后把数组转化为字符串利用ajax请求发送到后台
问题所在:这脚本调用的时候要传入svg节点和一个以pngUri为参数的异步回调函数,
当只有一个svg节点的时候好办,直接把请求放到回调函数里面就行了,
可是有多个节点的情况下,你要用循环,这就出现了困难:
请求放在回调函数里面吧,就会被执行很多次,每一次数组会增加一个元素,只有最后一次发送的数据才是包含了所有uri的数组
请求放在外面吧,因为异步调用,ajax请求会先执行,此时数组里并没有数据
我被这个问题困扰了很久很久,刚开始还不知道错在哪里,发现错误原因后,考虑着能不能把脚本里面的异步回调函数弄成同步的?但是,想走这个方向,很难,当时我只是个超级新手+菜鸟(连异步调用都没看明白),更别说看懂那个转换的脚本了,后来还是朝着另外一个方向走,把请求放在回调函数里面,想办法让他只执行一次,于是就有了一个不太满意的解决办法,先记录下svg节点数,然会在回调函数里面写个if语句,if(调用次数等于svg节点数)执行ajax请求,问题是解决了,但是不太满意。
之后又看了关于闭包的概念,想着和这个地方应该有点关系,在自己的电脑上重现当初的代码(因为没实习了),果然还真有关系,主函数执行完毕之后,异步回调函数执行时还能记得当初的uri,而且,既然他是回调函数,那就要先注册啊,注册总是在执行ajax之前吧,于是,我插了几个断点,结果证明我的想法是对的,所以我在注册的时候顺便把uri装进数组,然后回调函数什么都不干。这次解决方案好多了,不用写if语句了,ajax的数组也正确了,但是还是不够优雅,感觉随便改别人的脚本不太好。
居然又发现了缺陷!发送svg数组后,我居然在服务器的某个目录先生成了png图,在读写word的时候,我把图片路径作为参数,不对劲啊,应该直接把uri转成图片流送到读写word的方法里面啊,不然你写好word之后还要把服务器的图片删除!
- 记录一个项目中的矛盾
- 软件开发中的矛盾——一个简单的例子
- 软件开发中的矛盾——一个简单的例子
- 一个矛盾的人
- 婚姻中的自我矛盾
- 大行业中的矛盾
- 项目中的问题记录
- 项目预估激发的矛盾
- 项目预估激发的矛盾
- 矛盾
- 矛盾
- 矛盾
- 矛盾
- 矛盾
- 矛盾
- 矛盾
- 矛盾!!
- 矛盾
- Javascript 严格模式详解
- litepal开源库的使用
- 欢迎使用CSDN-markdown编辑器
- 404. Sum of Left Leaves
- Linux内核移植 part2:uboot lcd驱动
- 记录一个项目中的矛盾
- 大型网站架构之分布式消息队列
- 虚拟机类加载机制
- Java 反射的理解
- html5笔记4 — canvas绘制文字
- 解决openssh-server : Depends: libwrap0( = 7.6-4~)
- Java泛型
- React源码分析7 — React合成事件系统
- qt停靠窗创建