summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Early <alexander.early@gmail.com>2016-03-07 22:28:11 -0800
committerAlexander Early <alexander.early@gmail.com>2016-03-07 22:28:11 -0800
commit0736189b1d2909121656d79879726b031ea8ed87 (patch)
tree75eddc87a57d62efe654091ddd5c54da9d7efbb8
parent0600652d67344373ba9885d4a7bb6087065c9634 (diff)
downloadasync-0736189b1d2909121656d79879726b031ea8ed87.tar.gz
pass extra args to setImmediate/nextTick. Fixes #940
-rw-r--r--README.md7
-rw-r--r--lib/internal/setImmediate.js18
-rw-r--r--mocha_test/nextTick.js38
-rw-r--r--mocha_test/setImmediate.js24
-rwxr-xr-xtest/test-async.js27
5 files changed, 78 insertions, 36 deletions
diff --git a/README.md b/README.md
index c7ec1a1..d527b42 100644
--- a/README.md
+++ b/README.md
@@ -1568,7 +1568,7 @@ three
---------------------------------------
<a name="nextTick"></a>
-### nextTick(callback), setImmediate(callback)
+### nextTick(callback, [args...]), setImmediate(callback, [args...])
Calls `callback` on a later loop around the event loop. In Node.js this just
calls `process.nextTick`; in the browser it falls back to `setImmediate(callback)`
@@ -1580,6 +1580,7 @@ This is used internally for browser-compatibility purposes.
__Arguments__
* `callback` - The function to call on a later loop around the event loop.
+* `args...` - any number of additional arguments to pass to the callback on the next tick
__Example__
@@ -1590,6 +1591,10 @@ async.nextTick(function(){
// call_order now equals ['one','two']
});
call_order.push('one')
+
+async.setImmediate(function (a, b, c) {
+ // a, b, and c equal 1, 2, and 3
+}, 1, 2, 3)
```
---------------------------------------
diff --git a/lib/internal/setImmediate.js b/lib/internal/setImmediate.js
index c02ad71..7d15249 100644
--- a/lib/internal/setImmediate.js
+++ b/lib/internal/setImmediate.js
@@ -1,19 +1,21 @@
'use strict';
+import rest from 'lodash/rest';
var _setImmediate = typeof setImmediate === 'function' && setImmediate;
-var _delay;
+var _defer;
if (_setImmediate) {
- _delay = function(fn) {
- // not a direct alias for IE10 compatibility
- _setImmediate(fn);
- };
+ _defer = _setImmediate;
} else if (typeof process === 'object' && typeof process.nextTick === 'function') {
- _delay = process.nextTick;
+ _defer = process.nextTick;
} else {
- _delay = function(fn) {
+ _defer = function(fn) {
setTimeout(fn, 0);
};
}
-export default _delay;
+export default rest(function (fn, args) {
+ _defer(function () {
+ fn.apply(null, args);
+ });
+});
diff --git a/mocha_test/nextTick.js b/mocha_test/nextTick.js
new file mode 100644
index 0000000..b428822
--- /dev/null
+++ b/mocha_test/nextTick.js
@@ -0,0 +1,38 @@
+var async = require('../lib');
+var expect = require('chai').expect;
+
+describe("nextTick", function () {
+
+ it('basics', function(done){
+ var call_order = [];
+ async.nextTick(function(){call_order.push('two');});
+ call_order.push('one');
+ setTimeout(function(){
+ expect(call_order).to.eql(['one','two']);
+ done();
+ }, 50);
+ });
+
+ it('nextTick in the browser', function(done){
+ if (!process.browser) {
+ // skip this test in node
+ return done();
+ }
+
+ var call_order = [];
+ async.nextTick(function(){call_order.push('two');});
+
+ call_order.push('one');
+ setTimeout(function(){
+ expect(call_order).to.eql(['one','two']);
+ done();
+ }, 50);
+ });
+
+ it("extra args", function (done) {
+ async.nextTick(function (a, b, c) {
+ expect([a, b, c]).to.eql([1, 2, 3]);
+ done();
+ }, 1, 2, 3);
+ });
+});
diff --git a/mocha_test/setImmediate.js b/mocha_test/setImmediate.js
new file mode 100644
index 0000000..854111a
--- /dev/null
+++ b/mocha_test/setImmediate.js
@@ -0,0 +1,24 @@
+var async = require('../lib');
+var expect = require('chai').expect;
+
+describe("setImmediate", function () {
+
+ it('basics', function(done){
+ var call_order = [];
+ async.setImmediate(function(){call_order.push('two');});
+ call_order.push('one');
+
+ setTimeout(function(){
+ expect(call_order).to.eql(['one','two']);
+ done();
+ }, 25);
+ });
+
+ it("extra args", function (done) {
+ async.setImmediate(function (a, b, c) {
+ expect([a, b, c]).to.eql([1, 2, 3]);
+ done();
+ }, 1, 2, 3);
+ });
+
+});
diff --git a/test/test-async.js b/test/test-async.js
index b4aef6c..ba79684 100755
--- a/test/test-async.js
+++ b/test/test-async.js
@@ -2042,33 +2042,6 @@ console_fn_tests('dir');
console_fn_tests('warn');
console_fn_tests('error');*/
-exports['nextTick'] = function(test){
- test.expect(1);
- var call_order = [];
- async.nextTick(function(){call_order.push('two');});
- call_order.push('one');
- setTimeout(function(){
- test.same(call_order, ['one','two']);
- test.done();
- }, 50);
-};
-
-exports['nextTick in the browser'] = function(test){
- if (!isBrowser()) {
- // skip this test in node
- return test.done();
- }
- test.expect(1);
-
- var call_order = [];
- async.nextTick(function(){call_order.push('two');});
-
- call_order.push('one');
- setTimeout(function(){
- test.same(call_order, ['one','two']);
- }, 50);
- setTimeout(test.done, 100);
-};
exports['concat'] = function(test){
test.expect(3);