簡體   English   中英

何時是使用process.nextTick的最佳時間?

[英]When's the best time to use process.nextTick?

我給人的印象是...所有JavaScript函數都是同步的,除非與process.nextTick一起使用。 什么時候是最佳使用時間?

我要確保在不需要的地方不要過度使用它。 在這一點上,我正在考慮在諸如數據庫調用之類的東西之前使用它,但是,據我所知,同時,由於整個“異步IO”事件,這些調用默認情況下是異步的。

僅在JavaScript范圍內進行大量工作時才使用它們嗎? 喜歡解析XML等嗎?

順便說一句,已經有一個這樣的問題,但似乎已經死了,所以我提出了另一個問題。

這個答案沒有聲稱是完整的,但是我的想法是:

我可以想象兩個用例。 第一個是,確保某些內容確實是異步的。 使用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'));

這將完全不起作用,因為在建立偵聽器之前會觸發事件。 process.nextTick()確保不會發生這種情況。

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

編輯:刪除第二個建議,因為它完全是錯誤的

我正在考慮在像數據庫調用之類的東西之前使用它,但是,據我所知,同時,由於整個“異步IO”事件,這些調用默認情況下是異步的。

是。 數據庫驅動程序本身應該已經是本機異步的,因此您無需在這里使用process.nextTick使其“異步”。 最耗時的部分是IO和數據庫內部的計算,因此,等待額外的滴答聲實際上只會減慢速度。

僅在JavaScript范圍內進行大量工作時才使用它們嗎? 喜歡解析XML等嗎?

對,就是這樣。 您可以使用它來防止大型同步功能阻塞您的應用程序。 如果要解析XML文件,而不是在3秒鍾之內瀏覽文件,而無法打開任何新連接,沒有收到請求,也沒有發送響應,那么您將流化該文件並每次僅解析其中的一小部分在使用nextTick並允許其他工作同時進行之前。

但是,請注意, 解析器nextTick內部使用nextTick並提供異步API,而不是調用者在調用解析器之前使用nextTick

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM