made with requirebin
Created
May 21, 2014 19:43
-
-
Save jessetane/77c217fc347514cd9e76 to your computer and use it in GitHub Desktop.
requirebin sketch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var queue = require('queue'); | |
function Fetcher() { | |
this.fetch = this.fetch.bind(this); | |
} | |
Fetcher.prototype.fetch = function(cb) { | |
var self = this; | |
// for our example, make sure all jobs timeout | |
setTimeout(function() { | |
cb(); | |
}, 1000); | |
// but randomly mark some jobs as stillAlive before the timeout | |
setTimeout(function() { | |
self.fetch.stillAlive = true; | |
}, Math.random() * 1000); | |
}; | |
var q = queue({ | |
concurrency: Infinity, | |
timeout: 500 | |
}); | |
var numberOfJobsThatDidNotTimeout = 0; | |
q.on('timeout', function(next, job) { | |
// these jobs never indicated they were still alive so we ignore them | |
if (!job.stillAlive) { | |
next(); | |
} | |
// these jobs did so we let them finish | |
else { | |
numberOfJobsThatDidNotTimeout++; | |
} | |
}); | |
q.on('end', function() { | |
console.log(numberOfJobsThatDidNotTimeout); | |
}); | |
for (var i=0; i<10; i++) { | |
var f = new Fetcher(); | |
q.push(f.fetch); | |
} | |
q.start(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){function EventEmitter(){this._events=this._events||{};this._maxListeners=this._maxListeners||undefined}module.exports=EventEmitter;EventEmitter.EventEmitter=EventEmitter;EventEmitter.prototype._events=undefined;EventEmitter.prototype._maxListeners=undefined;EventEmitter.defaultMaxListeners=10;EventEmitter.prototype.setMaxListeners=function(n){if(!isNumber(n)||n<0||isNaN(n))throw TypeError("n must be a positive number");this._maxListeners=n;return this};EventEmitter.prototype.emit=function(type){var er,handler,len,args,i,listeners;if(!this._events)this._events={};if(type==="error"){if(!this._events.error||isObject(this._events.error)&&!this._events.error.length){er=arguments[1];if(er instanceof Error){throw er}else{throw TypeError('Uncaught, unspecified "error" event.')}return false}}handler=this._events[type];if(isUndefined(handler))return false;if(isFunction(handler)){switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:len=arguments.length;args=new Array(len-1);for(i=1;i<len;i++)args[i-1]=arguments[i];handler.apply(this,args)}}else if(isObject(handler)){len=arguments.length;args=new Array(len-1);for(i=1;i<len;i++)args[i-1]=arguments[i];listeners=handler.slice();len=listeners.length;for(i=0;i<len;i++)listeners[i].apply(this,args)}return true};EventEmitter.prototype.addListener=function(type,listener){var m;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events)this._events={};if(this._events.newListener)this.emit("newListener",type,isFunction(listener.listener)?listener.listener:listener);if(!this._events[type])this._events[type]=listener;else if(isObject(this._events[type]))this._events[type].push(listener);else this._events[type]=[this._events[type],listener];if(isObject(this._events[type])&&!this._events[type].warned){var m;if(!isUndefined(this._maxListeners)){m=this._maxListeners}else{m=EventEmitter.defaultMaxListeners}if(m&&m>0&&this._events[type].length>m){this._events[type].warned=true;console.error("(node) warning: possible EventEmitter memory "+"leak detected. %d listeners added. "+"Use emitter.setMaxListeners() to increase limit.",this._events[type].length);console.trace()}}return this};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.once=function(type,listener){if(!isFunction(listener))throw TypeError("listener must be a function");var fired=false;function g(){this.removeListener(type,g);if(!fired){fired=true;listener.apply(this,arguments)}}g.listener=listener;this.on(type,g);return this};EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events||!this._events[type])return this;list=this._events[type];length=list.length;position=-1;if(list===listener||isFunction(list.listener)&&list.listener===listener){delete this._events[type];if(this._events.removeListener)this.emit("removeListener",type,listener)}else if(isObject(list)){for(i=length;i-->0;){if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break}}if(position<0)return this;if(list.length===1){list.length=0;delete this._events[type]}else{list.splice(position,1)}if(this._events.removeListener)this.emit("removeListener",type,listener)}return this};EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener){if(arguments.length===0)this._events={};else if(this._events[type])delete this._events[type];return this}if(arguments.length===0){for(key in this._events){if(key==="removeListener")continue;this.removeAllListeners(key)}this.removeAllListeners("removeListener");this._events={};return this}listeners=this._events[type];if(isFunction(listeners)){this.removeListener(type,listeners)}else{while(listeners.length)this.removeListener(type,listeners[listeners.length-1])}delete this._events[type];return this};EventEmitter.prototype.listeners=function(type){var ret;if(!this._events||!this._events[type])ret=[];else if(isFunction(this._events[type]))ret=[this._events[type]];else ret=this._events[type].slice();return ret};EventEmitter.listenerCount=function(emitter,type){var ret;if(!emitter._events||!emitter._events[type])ret=0;else if(isFunction(emitter._events[type]))ret=1;else ret=emitter._events[type].length;return ret};function isFunction(arg){return typeof arg==="function"}function isNumber(arg){return typeof arg==="number"}function isObject(arg){return typeof arg==="object"&&arg!==null}function isUndefined(arg){return arg===void 0}},{}],V6rcwC:[function(require,module,exports){var inherits=require("inherits");var EventEmitter=require("events").EventEmitter;module.exports=Queue;function Queue(options){if(!(this instanceof Queue))return new Queue(options);EventEmitter.call(this);options=options||{};this.concurrency=options.concurrency||1;this.timeout=options.timeout||0;this.pending=0;this.session=0;this.running=false;this.jobs=[]}inherits(Queue,EventEmitter);var arrayMethods=["push","unshift","splice","pop","shift","slice","reverse","indexOf","lastIndexOf"];for(var method in arrayMethods)(function(method){Queue.prototype[method]=function(){return Array.prototype[method].apply(this.jobs,arguments)}})(arrayMethods[method]);Object.defineProperty(Queue.prototype,"length",{get:function(){return this.pending+this.jobs.length}});Queue.prototype.start=function(){if(this.pending===this.concurrency){return}if(this.jobs.length===0){if(this.pending===0){done.call(this)}return}var job=this.jobs.shift();var self=this;var once=true;var session=this.session;var timeoutId=null;var didTimeout=false;var next=function(err,result){if(once&&self.session===session){once=false;self.pending--;if(timeoutId!==null){clearTimeout(timeoutId)}if(err){self.emit("error",err,job)}else if(didTimeout===false){self.emit("success",result,job)}if(self.session===session){if(self.pending===0&&self.jobs.length===0){done.call(self)}else if(self.running){self.start()}}}};if(this.timeout){timeoutId=setTimeout(function(){didTimeout=true;if(self.listeners("timeout").length>0){self.emit("timeout",next,job)}else{next()}},this.timeout)}this.pending++;this.running=true;job(next);if(this.jobs.length>0){this.start()}};Queue.prototype.stop=function(){this.running=false};Queue.prototype.end=function(err){if(this.jobs.length||this.pending){this.jobs=[];this.pending=0;this.session++;done.call(this,err)}};function done(err){this.session++;this.running=false;this.emit("end",err)}},{events:1,inherits:4}],queue:[function(require,module,exports){module.exports=require("V6rcwC")},{}],4:[function(require,module,exports){if(typeof Object.create==="function"){module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:false,writable:true,configurable:true}})}}else{module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;var TempCtor=function(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor;ctor.prototype.constructor=ctor}}},{}]},{},[]);var queue=require("queue");function Fetcher(){this.fetch=this.fetch.bind(this)}Fetcher.prototype.fetch=function(cb){var self=this;setTimeout(function(){cb()},1e3);setTimeout(function(){self.fetch.stillAlive=true},Math.random()*1e3)};var q=queue({concurrency:Infinity,timeout:500});var numberOfJobsThatDidNotTimeout=0;q.on("timeout",function(next,job){if(!job.stillAlive){next()}else{numberOfJobsThatDidNotTimeout++}});q.on("end",function(){console.log(numberOfJobsThatDidNotTimeout)});for(var i=0;i<10;i++){var f=new Fetcher;q.push(f.fetch)}q.start(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "requirebin-sketch", | |
"version": "1.0.0", | |
"dependencies": { | |
"queue": "2.2.0" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<style type='text/css'>html, body { margin: 0; padding: 0; border: 0; } | |
body, html { height: 100%; width: 100%; }</style> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment