为什么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函数。