理解事件驱动编程风格

时间:2015-12-09 17:48:28

标签: javascript

寻找这个例子(以及我之前在事件驱动中的知识)。我可以说这两个例程独立并行地运行(因此不会阻止孔程序)。

Exception in thread "main" java.lang.StackOverflowError
    at sun.misc.VM.isBooted(VM.java:165)
    at java.util.Hashtable.initHashSeedAsNeeded(Hashtable.java:226)
    at java.util.Hashtable.<init>(Hashtable.java:263)
    at java.util.Hashtable.<init>(Hashtable.java:283)
    at java.util.Properties.<init>(Properties.java:143)
    at java.util.Properties.<init>(Properties.java:135)

但如果我做出这样的改变:

//....declaration and methods
register_1.on("execut_routine _1", function() { console.log("executed the routine  1"):})
register_2.on("execut_routine _2", function() { console.log("executed the routine  2"):})

第一个触发事件将阻止第二个事件的发生,对吧?如果是这样,我该如何扭转这种影响呢?

2 个答案:

答案 0 :(得分:2)

Javascript是一个单线程环境,因此除非您正在执行与输入/输出相关的任务(等待文件系统,调用外部资源等),否则您的代码必须等待其他代码完成。

使用事件驱动的编程样式可以帮助您解决此问题。

但是,您可以告诉您的代码进入某种“睡眠”状态。模式,它等待其他代码执行,并在事件循环的下一个滴答处再次开始。例如,Node.js使用process.nextTick(fn)来注册应该在多个tick上执行的代码。

答案 1 :(得分:0)

Javascript [通常]不是一个多线程环境,所以即使在你的第一个例子中,实际情况是它们是串行执行而不是并行执行。可以认为XHR是并行运行的,但它们是作为浏览器的功能运行而不是直接运行Javascript(即网络请求并行运行),但javascript处理程序将始终以串行方式启动。