summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorisaacs <i@izs.me>2013-07-13 15:20:27 -0700
committerisaacs <i@izs.me>2013-07-13 15:20:30 -0700
commit33d746c656d748635986a097ae74ea3208d649a2 (patch)
tree42c138d895cea436bc6c5fbd337676a61e6fe020
parent2c47030174b109cbb66fbfe4cd88215a0a458d0b (diff)
downloadnode-reviewme.tar.gz
doc: Explain process.nextTick timingreviewme
Provide more detailed explanation of the timing of `process.nextTick` relative to I/O.
-rw-r--r--doc/api/process.markdown21
1 files changed, 18 insertions, 3 deletions
diff --git a/doc/api/process.markdown b/doc/api/process.markdown
index 0905d45c8..5bb26cf7f 100644
--- a/doc/api/process.markdown
+++ b/doc/api/process.markdown
@@ -454,14 +454,24 @@ This will generate:
## process.nextTick(callback)
-On the next loop around the event loop call this callback.
+* `callback` {Function}
+
+Once the current pass through the event loop runs to completion, call
+the callback function.
+
This is *not* a simple alias to `setTimeout(fn, 0)`, it's much more
-efficient. It typically runs before any other I/O events fire, but there
-are some exceptions.
+efficient. It runs before any additional I/O events (including
+timers) fire in subsequent ticks of the event loop.
+ console.log('start');
process.nextTick(function() {
console.log('nextTick callback');
});
+ console.log('scheduled');
+ // Output:
+ // start
+ // scheduled
+ // nextTick callback
This is important in developing APIs where you want to give the user the
chance to assign event handlers after an object has been constructed,
@@ -513,6 +523,11 @@ This approach is much better:
fs.stat('file', cb);
}
+Note: the nextTick queue is completely drained on each pass of the
+event loop **before** additional I/O is processed. As a result,
+recursively setting nextTick callbacks will block any I/O from
+happening, just like a `while(true);` loop.
+
## process.umask([mask])
Sets or reads the process's file mode creation mask. Child processes inherit