为什么Struts的split方法在NodeJS中同步执行?
我是NodeJS的新手,在理解什么types的动作/任务是asynchronous执行还是同步执行时有点麻烦。 我正在努力的具体例子是拆分一个string。
我试图计算一段文本中的新行数,然后打印出来。 下面的例子工作。 但是,我不完全清楚为什么。 我的基本(也可能是有缺陷的)理解是任何需要时间的事情都是asynchronous执行的(例如I / O),但我不知道什么types的操作算作“花时间”。 Split()方法是否“花费时间”? 它必须遍历一个string的内容,如果stringexception长,这可能需要一段时间,为什么这是同步执行还是仅仅是拆分方法阻止?
我的问题在这里是针对split方法的,但是如果任何人也可以谈论或者指向一些解释什么是asynchronous执行的文档的方向,那真的很感谢!
var array = "test\nstring\nexample".split("\n"); console.log(array.length-1);
JavaScript本身的大部分操作都是同步的。 例外情况包括诸如setTimeout()
, setInterval()
, requestAnimationFrame()
等明显的例外。另外,仅仅因为你传递callback函数并不意味着函数是asynchronous的(例如看一些数组方法,比如array.forEach()
, array.map()
, array.filter()
, array.some()
等)。
基于JavaScript(通过v8引擎)构build的Node.js(核心)增加了自己的同步和asynchronous方法。 然而,在相当早的时候,决定通过一个容易看到的Sync
后缀来区分这两个Sync
函数。 但是,类似于JavaScript,有一些例外(例如require()
)。 还应该注意的是,userland模块(例如npm)可能有自己的约定(或根本没有),所以对于那些第三方模块,您需要阅读文档以确定其导出函数的行为。
基本上JavaScript是单线程的。 最好的build议是假设它是单线程的,除非另有说明。
不同步的函数倾向于接受要执行的callback参数。 这些例子将是一个jQuery.ajax
调用或setTimeout
函数。