1.事情起因:
原因是本人在使用nedb数据库进行数据插入的时候,发现莫名其妙多出了很多很多的数据,很容易想到,那么就是插入语句被调用了N多次,并且每一次插入的数据都是之前已经插入过的数据,比如说第一次插入的是{id:1,name:xx},第二次就是插入【{id:1,name:xx},{id:2,name:xx}】,以此类推… 会出现很多很多重复并且反复插入的数据,那这是什么原因导致的呢?又应该如何处理呢?
2.业务场景
我们需要一个收发器,那么 可以通过ipcRenderer.send(channel,data)方法进行发送数据,有发送器自然有接收器,也是通过ipcMain.on(channel , (ev,data)=>{})。最近有个静默下载需求,在用户毫无感知的情况下完成下载解压,并且打开文件的操作,在下载完成之后,将信息存入nedb数据库中,废话不多说,看图说话。
3.详情描述
ps:打码部分是无关部分,为了区分重点!
1.ipcRenderer发送信息到通道中
2.在main.js中ipcMain进行监听。
3.在每一次进来的时候都给了一个打印值。
4.调用electron静默下载。
5.在下载状态中,有update状态,表示下载的进度情况,通常用作做进度条,updateProgressing就是用作更新进度条信息。
6.下载完成有 一个监听函数,item.on(‘done’, (e, state) => {}),对done事件进行监听debug调试
因为点了第二个应用下载了,所以done事件进行了两次
当然。点击次数越多进行越多
7.造成的原因是什么咧?很简单,debug看看item对象就明白了。
很明显,有两个事件:update 和done 事件 ,次数越来越多的原因是因为item对象没有被清空,那如何解决这个问题呢?
有一个比较简单的处理方法,就是直接return false;
在监听逻辑操作完成之后,将flag标志成true;在下一次执行的时候直接截断;不再进行反复循环操作。
结果如下:
下载恢复了正常。