mirror of https://github.com/lukechilds/node.git
Browse Source
`setTimeout()`, `setInterval()` and `setIntermediate` currently throw errors when receiving non-function objects as their first argument, but only do so when trying to execute the callback, i.e. after the waited time has passed. This may complicate debugging when a lot of calls to `setTimeout()`/etc. are involved, so failing as early as possible seems like a good idea. `setTimeout()` historically ignored an falsy first argument, while the other functions do not and throw instead. This patch changes this behaviour to make all three match and adds remarks in the corresponding documentation. PR-URL: https://github.com/nodejs/node/pull/4362 Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Brian White <mscdex@mscdex.net> Reviewed-By: Trevor Norris <trev.norris@gmail.com> Reviewed-By: Rod Vagg <rod@vagg.org>process-exit-stdio-flushing
committed by
Rod Vagg
3 changed files with 80 additions and 0 deletions
@ -0,0 +1,62 @@ |
|||
'use strict'; |
|||
const common = require('../common'); |
|||
const assert = require('assert'); |
|||
|
|||
function doSetTimeout(callback, after) { |
|||
return function() { |
|||
setTimeout(callback, after); |
|||
}; |
|||
} |
|||
|
|||
assert.throws(doSetTimeout('foo'), |
|||
/"callback" argument must be a function/); |
|||
assert.throws(doSetTimeout({foo: 'bar'}), |
|||
/"callback" argument must be a function/); |
|||
assert.throws(doSetTimeout(), |
|||
/"callback" argument must be a function/); |
|||
assert.throws(doSetTimeout(undefined, 0), |
|||
/"callback" argument must be a function/); |
|||
assert.throws(doSetTimeout(null, 0), |
|||
/"callback" argument must be a function/); |
|||
assert.throws(doSetTimeout(false, 0), |
|||
/"callback" argument must be a function/); |
|||
|
|||
|
|||
function doSetInterval(callback, after) { |
|||
return function() { |
|||
setInterval(callback, after); |
|||
}; |
|||
} |
|||
|
|||
assert.throws(doSetInterval('foo'), |
|||
/"callback" argument must be a function/); |
|||
assert.throws(doSetInterval({foo: 'bar'}), |
|||
/"callback" argument must be a function/); |
|||
assert.throws(doSetInterval(), |
|||
/"callback" argument must be a function/); |
|||
assert.throws(doSetInterval(undefined, 0), |
|||
/"callback" argument must be a function/); |
|||
assert.throws(doSetInterval(null, 0), |
|||
/"callback" argument must be a function/); |
|||
assert.throws(doSetInterval(false, 0), |
|||
/"callback" argument must be a function/); |
|||
|
|||
|
|||
function doSetImmediate(callback, after) { |
|||
return function() { |
|||
setImmediate(callback, after); |
|||
}; |
|||
} |
|||
|
|||
assert.throws(doSetImmediate('foo'), |
|||
/"callback" argument must be a function/); |
|||
assert.throws(doSetImmediate({foo: 'bar'}), |
|||
/"callback" argument must be a function/); |
|||
assert.throws(doSetImmediate(), |
|||
/"callback" argument must be a function/); |
|||
assert.throws(doSetImmediate(undefined, 0), |
|||
/"callback" argument must be a function/); |
|||
assert.throws(doSetImmediate(null, 0), |
|||
/"callback" argument must be a function/); |
|||
assert.throws(doSetImmediate(false, 0), |
|||
/"callback" argument must be a function/); |
Loading…
Reference in new issue