[javascript] NodeJS - setTimeout (fn, 0) vs. setImmediate (fn)


Answers

setImmediate () soll die sofortige Ausführung des Callbacks nach E / A-Ereignisrückrufen und vor setTimeout und setInterval einplanen.

setTimeout () soll die Ausführung eines einmaligen Rückrufs nach einer Verzögerung von Millisekunden einplanen .

Das sagen die Dokumente.

setTimeout(function() {
  console.log('setTimeout')
}, 0)

setImmediate(function() {
  console.log('setImmediate')
})

Wenn Sie den obigen Code ausführen, wird das Ergebnis wie folgt sein ... obwohl das aktuelle Dokument besagt, dass "die sofortige Ausführung des Rückrufs nach E / A-Ereignisrückrufen und vor setTimeout und setInterval" geplant wird. ..

Ergebnis..

setTimeout

setImmediate

Wenn Sie Ihr Beispiel in einen anderen Timer einfügen, wird immer setImmediate gefolgt von setTimeout ausgegeben.

setTimeout(function() {
  setTimeout(function() {
    console.log('setTimeout')
  }, 0);
  setImmediate(function() {
    console.log('setImmediate')
  });
}, 10);
Question

Was ist der Unterschied zwischen diesen beiden und wann werde ich einen über dem anderen benutzen?




Verwenden setImmediate immer setImmediate , es sei denn, Sie sind wirklich sicher, dass Sie setTimeout(,0) benötigen (aber ich kann mir nicht vorstellen, was für). setImmediate Callback wird fast immer vor setTimeout(,0) , außer beim Aufruf des ersten setImmediate und im setImmediate Callback.




setTimeout (fn, 0) kann verwendet werden, um zu verhindern, dass der Browser bei einem massiven Update einfriert. Zum Beispiel in websocket.onmessage, haben Sie möglicherweise HTML-Änderungen, und wenn Nachrichten weiterhin kommen, kann der Browser einfrieren, wenn Sie setImmidiate verwenden






Links