CNode

javascript中监听器注册的函数在短时间内被大量执行,怎样保证执行顺序?

问答
Llijingjiang发布于10 年前最后回复10 年前4 回复4153 浏览0 收藏

作为一个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)

L
lijingjiang#1·10 年前

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

J
joesonw#2·10 年前

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

Z
zanjs#3·10 年前

nice

W
wdlhao#4·10 年前

nice

参与回复
登录后即可参与回复。登录