Skip to content

Instantly share code, notes, and snippets.

@isaacs
Created October 28, 2013 23:39
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save isaacs/7206752 to your computer and use it in GitHub Desktop.
Save isaacs/7206752 to your computer and use it in GitHub Desktop.
var isset = false
var interval
var assert = require('assert')
var doNT = !!process.argv[2]
function set() {
console.error(arguments.callee.name)
assert(!isset)
isset = true
interval = setInterval(intFn)
}
function clear() {
console.error(arguments.callee.name)
assert(isset)
isset = false
if (doNT)
process.nextTick(clear_)
else
clear_()
}
function clear_() {
console.error(arguments.callee.name)
clearInterval(interval)
}
function intFn() {
console.error(arguments.callee.name)
assert(isset)
timeouts()
}
function timeouts() {
console.error(arguments.callee.name)
setTimeout(toFn)
setTimeout(toFn)
setTimeout(toFn)
}
function toFn() {
console.error(arguments.callee.name)
if (!isset)
set()
else
clear()
}
toFn()
/*
$ ./node x.js
toFn
set
intFn
timeouts
toFn
clear
clear_
toFn
set
toFn
clear
clear_
$ ./node x.js helloyesthisisnexttick
toFn
set
intFn
timeouts
toFn
clear
toFn
set
toFn
clear
intFn
assert.js:98
throw new assert.AssertionError({
^
AssertionError: false == true
at intFn (/Users/isaacs/dev/js/node-master/x.js:30:3)
at wrapper [as _onTimeout] (timers.js:249:14)
at Timer.listOnTimeout (timers.js:107:15)
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment