Skip to content

Commit 25b3c0a

Browse files
committed
Merge pull request #382 from cujojs/combine-timer-async-env
Combine async and timer modules into single env module
2 parents 4bf2926 + dcbeedb commit 25b3c0a

File tree

9 files changed

+83
-109
lines changed

9 files changed

+83
-109
lines changed

lib/Promise.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ define(function (require) {
77

88
var makePromise = require('./makePromise');
99
var Scheduler = require('./Scheduler');
10-
var async = require('./async');
10+
var async = require('./env').asap;
1111

1212
return makePromise({
1313
scheduler: new Scheduler(async)

lib/async.js

-59
This file was deleted.

lib/decorators/timed.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
(function(define) { 'use strict';
66
define(function(require) {
77

8-
var timer = require('../timer');
8+
var env = require('../env');
99
var TimeoutError = require('../TimeoutError');
1010

1111
function setTimeout(f, ms, x, y) {
12-
return timer.set(function() {
12+
return env.setTimer(function() {
1313
f(x, y, ms);
1414
}, ms);
1515
}
@@ -52,11 +52,11 @@ define(function(require) {
5252

5353
this._handler.visit(h,
5454
function onFulfill(x) {
55-
timer.clear(t);
55+
env.clearTimer(t);
5656
this.resolve(x); // this = h
5757
},
5858
function onReject(x) {
59-
timer.clear(t);
59+
env.clearTimer(t);
6060
this.reject(x); // this = h
6161
},
6262
h.notify);

lib/decorators/unhandledRejection.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
(function(define) { 'use strict';
66
define(function(require) {
77

8-
var timer = require('../timer');
8+
var setTimer = require('../env').setTimer;
99

1010
return function unhandledRejection(Promise) {
1111
var logError = noop;
@@ -56,7 +56,7 @@ define(function(require) {
5656
tasks.push(f, x);
5757
if(!running) {
5858
running = true;
59-
running = timer.set(flush, 0);
59+
running = setTimer(flush, 0);
6060
}
6161
}
6262

lib/env.js

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/** @license MIT License (c) copyright 2010-2014 original author or authors */
2+
/** @author Brian Cavalier */
3+
/** @author John Hann */
4+
5+
/*global process,document,setTimeout,clearTimeout,MutationObserver,WebKitMutationObserver*/
6+
(function(define) { 'use strict';
7+
define(function(require) {
8+
/*jshint maxcomplexity:6*/
9+
10+
// Sniff "best" async scheduling option
11+
// Prefer process.nextTick or MutationObserver, then check for
12+
// setTimeout, and finally vertx, since its the only env that doesn't
13+
// have setTimeout
14+
15+
var MutationObs;
16+
var capturedSetTimeout = typeof setTimeout !== 'undefined' && setTimeout;
17+
18+
// Default env
19+
var setTimer = function(f, ms) { return setTimeout(f, ms); };
20+
var clearTimer = function(t) { return clearTimeout(t); };
21+
var asap = function (f) { return capturedSetTimeout(f, 0); };
22+
23+
// Detect specific env
24+
if (isNode()) { // Node
25+
asap = function (f) { return process.nextTick(f); };
26+
27+
} else if (MutationObs = hasMutationObserver()) { // Modern browser
28+
asap = initMutationObserver(MutationObs);
29+
30+
} else if (!capturedSetTimeout) { // vert.x
31+
var vertxRequire = require;
32+
var vertx = vertxRequire('vertx');
33+
setTimer = function (f, ms) { return vertx.setTimer(ms, f); };
34+
clearTimer = vertx.cancelTimer;
35+
asap = vertx.runOnLoop || vertx.runOnContext;
36+
}
37+
38+
return {
39+
setTimer: setTimer,
40+
clearTimer: clearTimer,
41+
asap: asap
42+
};
43+
44+
function isNode () {
45+
return typeof process !== 'undefined' && process !== null &&
46+
typeof process.nextTick === 'function';
47+
}
48+
49+
function hasMutationObserver () {
50+
return (typeof MutationObserver === 'function' && MutationObserver) ||
51+
(typeof WebKitMutationObserver === 'function' && WebKitMutationObserver);
52+
}
53+
54+
function initMutationObserver(MutationObserver) {
55+
var scheduled;
56+
var node = document.createTextNode('');
57+
var o = new MutationObserver(run);
58+
o.observe(node, { characterData: true });
59+
60+
function run() {
61+
var f = scheduled;
62+
scheduled = void 0;
63+
f();
64+
}
65+
66+
var i = 0;
67+
return function (f) {
68+
scheduled = f;
69+
node.data = (i ^= 1);
70+
};
71+
}
72+
});
73+
}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));

lib/timer.js

-40
This file was deleted.

monitor/PromiseMonitor.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ define(function(require) {
88
var defaultStackJumpSeparator = 'from execution context:';
99
var defaultStackFilter = /[\s\(\/\\](node|module|timers)\.js:|when([\/\\]{1,2}(lib|monitor|es6-shim)[\/\\]{1,2}|\.js)|(new\sPromise)\b|(\b(PromiseMonitor|ConsoleReporter|Scheduler|RunHandlerTask|ProgressTask|Promise|.*Handler)\.[\w_]\w\w+\b)|\b(tryCatch\w+|getHandler\w*)\b/i;
1010

11-
var setTimer = require('../lib/timer').set;
11+
var setTimer = require('../lib/env').setTimer;
1212
var error = require('./error');
1313

1414
var executionContext = [];

node.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ define(function(require) {
1414
var when = require('./when');
1515
var Promise = when.Promise;
1616
var _liftAll = require('./lib/liftAll');
17-
var setTimer = require('./lib/timer').set;
17+
var setTimer = require('./lib/env').setTimer;
1818
var slice = Array.prototype.slice;
1919

2020
return {

test/monitor/delay-handled.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
define(function(require) {
33

44
var when = require('../../when');
5-
var async = require('../../lib/async');
5+
var async = require('../../lib/env').asap;
66

77
var p = when.reject(new Error('TEST FAILED, should not see this'));
88

0 commit comments

Comments
 (0)