timer: ref/unref return self

Most calls to ref() and unref() are chainable, timers should be
chainable, too.

Typical use:

    var to = setTimeout(ontimeout, 123).unref();

PR-URL: https://github.com/nodejs/node/pull/2905
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Trevor Norris <trevnorris@nodejs.org>
This commit is contained in:
Sam Roberts 2015-09-13 16:21:51 +01:00
parent 16f86d6c57
commit 94e663ac5f
3 changed files with 15 additions and 0 deletions

View File

@ -41,12 +41,16 @@ In the case of `setTimeout` when you `unref` you create a separate timer that
will wakeup the event loop, creating too many of these may adversely effect will wakeup the event loop, creating too many of these may adversely effect
event loop performance -- use wisely. event loop performance -- use wisely.
Returns the timer.
## ref() ## ref()
If you had previously `unref()`d a timer you can call `ref()` to explicitly If you had previously `unref()`d a timer you can call `ref()` to explicitly
request the timer hold the program open. If the timer is already `ref`d calling request the timer hold the program open. If the timer is already `ref`d calling
`ref` again will have no effect. `ref` again will have no effect.
Returns the timer.
## setImmediate(callback[, arg][, ...]) ## setImmediate(callback[, arg][, ...])
To schedule the "immediate" execution of `callback` after I/O events To schedule the "immediate" execution of `callback` after I/O events

View File

@ -330,11 +330,13 @@ Timeout.prototype.unref = function() {
this._handle.domain = this.domain; this._handle.domain = this.domain;
this._handle.unref(); this._handle.unref();
} }
return this;
}; };
Timeout.prototype.ref = function() { Timeout.prototype.ref = function() {
if (this._handle) if (this._handle)
this._handle.ref(); this._handle.ref();
return this;
}; };
Timeout.prototype.close = function() { Timeout.prototype.close = function() {
@ -345,6 +347,7 @@ Timeout.prototype.close = function() {
} else { } else {
exports.unenroll(this); exports.unenroll(this);
} }
return this;
}; };

View File

@ -12,6 +12,14 @@ var interval_fired = false,
var LONG_TIME = 10 * 1000; var LONG_TIME = 10 * 1000;
var SHORT_TIME = 100; var SHORT_TIME = 100;
assert.doesNotThrow(function() {
setTimeout(function() {}, 10).unref().ref().unref();
}, 'ref and unref are chainable');
assert.doesNotThrow(function() {
setInterval(function() {}, 10).unref().ref().unref();
}, 'ref and unref are chainable');
setInterval(function() { setInterval(function() {
interval_fired = true; interval_fired = true;
}, LONG_TIME).unref(); }, LONG_TIME).unref();