javascript中监听器注册的函数在短时间内被大量执行,怎样保证执行顺序?
发布于 8 年前 作者 lijingjiang 3662 次浏览 来自 问答

作为一个node和javascript 的新手, 有一个问题想请教各位。如果我希望将一个log系统的输出存储到数据库中,以logcat为例,我会有如下代码

logcat | node myapp.js

var rl = require(“readline”); rl.on(“data”, function() { //将当前内容存储到数据库中 if(existed()) { // do nothing } else { // save to database } })

但是因为logcat的输出速度非常快,并且node中所有的io操作都是异步的。那么

  1. 是否有可能出现前一次的写入还没有完成,下一次执行find() 操作的时候因为找不到这个数据从而重复存储的情况呢?

  2. 如果是的话,有什么方法来解决呢。根据我个人的理解,如果是在"一个"函数中,可以用回调函数的嵌套调用或者promise来解决,但是现在的逻辑代码注册在了监听器中,不知道有什么通用的思路?如果是java可以进行同步控制,保证当前写入的时候其他对该数据库的操作被阻塞(而且我使用了mongoose, 貌似不支持数据库操作的transaction)

非常感谢!

4 回复

自定一下,求大大们解答!

用一个数组做FIFO的队列. 加强性能可以 setTimeout 加判断队列长度做batch write

回到顶部