|
@@ -1,78 +0,0 @@
|
|
|
-/*
|
|
|
- * Caleb James DeLisle
|
|
|
- * Sat Mar 23 01:42:29 EDT 2013
|
|
|
- * Public Domain
|
|
|
- */
|
|
|
-;(function() {
|
|
|
-var nThen = function(next) {
|
|
|
- var funcs = [];
|
|
|
- var timeouts = [];
|
|
|
- var calls = 0;
|
|
|
- var abort;
|
|
|
- var waitFor = function(func) {
|
|
|
- calls++;
|
|
|
- return function() {
|
|
|
- if (func) {
|
|
|
- func.apply(null, arguments);
|
|
|
- }
|
|
|
- calls = (calls || 1) - 1;
|
|
|
- while (!calls && funcs.length && !abort) {
|
|
|
- funcs.shift()(waitFor);
|
|
|
- }
|
|
|
- };
|
|
|
- };
|
|
|
- waitFor.abort = function () {
|
|
|
- timeouts.forEach(clearTimeout);
|
|
|
- abort = 1;
|
|
|
- };
|
|
|
- var ret = {
|
|
|
- nThen: function(next) {
|
|
|
- if (!abort) {
|
|
|
- if (!calls) {
|
|
|
- next(waitFor);
|
|
|
- } else {
|
|
|
- funcs.push(next);
|
|
|
- }
|
|
|
- }
|
|
|
- return ret;
|
|
|
- },
|
|
|
- orTimeout: function(func, milliseconds) {
|
|
|
- if (abort) { return ret; }
|
|
|
- if (!milliseconds) { throw Error("Must specify milliseconds to orTimeout()"); }
|
|
|
- var cto;
|
|
|
- var timeout = setTimeout(function() {
|
|
|
- while (funcs.shift() !== cto) ;
|
|
|
- func(waitFor);
|
|
|
- calls = (calls || 1) - 1;
|
|
|
- while (!calls && funcs.length) { funcs.shift()(waitFor); }
|
|
|
- }, milliseconds);
|
|
|
- funcs.push(cto = function() {
|
|
|
- for (var i = 0; i < timeouts.length; i++) {
|
|
|
- if (timeouts[i] === timeout) {
|
|
|
- timeouts.splice(i, 1);
|
|
|
- clearTimeout(timeout);
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- throw new Error('timeout not listed in array');
|
|
|
- });
|
|
|
- timeouts.push(timeout);
|
|
|
- return ret;
|
|
|
- }
|
|
|
- };
|
|
|
- return ret.nThen(next);
|
|
|
-};
|
|
|
-
|
|
|
-if (typeof(define) == 'function') {
|
|
|
- // AMD (require.js etc)
|
|
|
- define([], function() { return nThen; });
|
|
|
-} else if (typeof(window) !== 'undefined') {
|
|
|
- // Browser global var nThen
|
|
|
- window.nThen = nThen;
|
|
|
-}
|
|
|
-if (typeof(module) !== 'undefined' && module.exports) {
|
|
|
- // Node.js
|
|
|
- module.exports = nThen;
|
|
|
-}
|
|
|
-
|
|
|
-})();
|