将process.nextTick中的调用函数和被调用函数括起来使它们异步?

时间:2017-01-26 08:22:02

标签: node.js asynchronous

process.nextTick功能已在start内时,是否需要从process.nextTick调用启动功能?我想让acceptstart函数同步?应该达到这个目标的理想方法是什么?

function accept() { // ACCEPT FUNCTION
   process.nextTick(() => {
      start(); // START CALL
   });
}

function start() { // START FUNCTION
  process.nextTick(() => {
      startPolling();
  });
}

1 个答案:

答案 0 :(得分:0)

没有。如果startPolling()功能阻止,则将其置于nextTick()回调中无法获得帮助。它将在事件循环的下一个滴答中阻塞整个线程 - 但它仍将阻止它。

示例:

没有nextTick

function x() {
    fs.readFileSync('file');
}
x(); // <-- it blocks here
console.log('...');

使用nextTick

function x() {
    pricess.nextTick(() => fs.readFileSync('file'));
}
x();
console.log('...');
// <-- it blocks here
// (end of file)

它实际上并没有阻止文件的最后一行,但它或多或少会发生什么 - 你的代码将继续运行,一旦没有更多的代码运行和下一个滴答可以启动事件循环,您的进程将阻止该函数,并且在fs.readFileSync()返回之前无法执行任何操作。

process.nextTick()永远不是阻止代码的解决方案。在某些你希望保持执行顺序一致的情况下,非阻塞代码会很有帮助,但是阻塞代码的解决方案不是使用nextTick而是避免阻塞函数(比如&#34) ;完全同步&#34;来自fs)。

事实上,唯一可以使用阻塞函数的地方(如readFileSync()require())位于事件循环的第一个刻度上 - 使用nextTick()保证你没有在第一次打勾时运行它们。