什么时候使用process.nextTick是最好的时机?

我从人们得到的印象是…所有的JavaScript函数都是同步的,除非与process.nextTick一起使用。 什么时候使用它的最佳时机?

我想确保我不会在不需要的地方使用它。 在这一点上,我正在考虑在数据库调用之前使用它,但是,据我所知,这些调用默认是asynchronous的,因为整个“asynchronousIO”的东西。

只有在JavaScript边界内进行一些密集的工作时才能使用它们吗? 像parsingXML等?

顺便说一句,已经有这样的问题,但似乎已经死了,所以我提出了另一个问题。

我打算在数据库调用之前使用它,但是,据我所知,这些调用默认是asynchronous的,因为整个“asynchronousIO”的东西。

是。 数据库驱动程序本身应该是本地asynchronous的,所以你不需要自己使用process.nextTick来“使其asynchronous”。 最耗时的部分是IO和数据库内部的计算,所以等待一个额外的嘀嗒实际上只是减慢了事情的速度。

只有在JavaScript边界内进行一些密集的工作时才能使用它们吗? 像parsingXML等?

对,就是这样。 您可以使用它来防止大型同步function阻止您的应用程序。 如果你想parsing一个XML文件,而不是啃咬它3秒,在这期间没有新的连接可以打开,没有收到请求,也没有响应被发送,你将stream式传输文件,每次只parsing它的小块在使用nextTick之前,允许其他工作同时完成。

但是,请注意, parsing器应该nextTick内部使用nextTick并在调用parsing器之前提供一个asynchronousAPI,而不是调用者使用nextTick

这个答案没有声称是完整的,但这是我的想法:

我可以想象两个用例。 第一个是确保某些东西真的是asynchronous的。 这在使用EventEmitter时非常方便。 想象一下,你想能够像这样使用你的发射器的所有方法:

 const EventEmitter = require('events'); class MyEmitter extends EventEmitter { aMethod(){ console.log('some sync stuff'); this.emit('aMethodResponse'); return this; } } var myEmitter = new MyEmitter(); myEmitter.aMethod() .once('aMethodResponse', () => console.log('got response')); 

在听众build立之前,事件被触发,这将不起作用。 process.nextTick()确保这不会发生。

 aMethod(){ console.log('some sync stuff'); process.nextTick(() => this.emit('aMethodResponse')); return this; } 

编辑:删除第二个build议,因为它是完全错误的