Skip to content

Instantly share code, notes, and snippets.

@geuis
Created July 30, 2011 04:40
Show Gist options
  • Select an option

  • Save geuis/1115202 to your computer and use it in GitHub Desktop.

Select an option

Save geuis/1115202 to your computer and use it in GitHub Desktop.
When-Then (pseudo javascript Promise)
var when = function(){
if( !(this instanceof when) ) return new when(arguments); //return new instance of itself
var self = this; //cached so the syntax of code within the function is more readable
self.pending = Array.prototype.slice.call(arguments[0]); //convert arguments passed in to array
self.pending_length = self.pending.length; //cache length of the arguments array
self.results = []; //container for results of async functions
(function(){ // define pass() within this context so that the outer scope of self(this) is available when pass() is executed within the user's async functions
self.pass = function(){
self.results.push(arguments); //push async results to cache array
if( self.results.length === self.pending_length ) //if all async functions have finished, pass the results to .then(), which has been redefined to the user's completion function
self.then.call(self, self.results);
};
})();
}
when.prototype = {
then: function(){
this.then = arguments[0]; //reassign .then() to the user-defined function that is executed on completion. Also ensures that this() can only be called once per usage of when()
while(this.pending[0]){
this.pending.shift().call(this, this.pass); //execute all functions user passed into when()
}
}
}
//#### TEST CASE 1 ####
when(
function(pass){
pass(2);
},
function(pass){
setTimeout(function(){
pass(1000);
}, 1000);
},
function(){
setTimeout(function(){
pass(100);
}, 100);
},
function(){
setTimeout(function(){
pass(2000);
}, 2000);
}
)
.then(function(results){
console.log(results);
})
//#### TEST CASE 2 (Node.js required) ####
var http = require('http');
var get = function(url, pass){
http.get({ host: url, port: 80 }, function(res){
var body = [];
res.on('data', function(chunk){
body.push(chunk);
})
.on('end', function(){
pass(body.join(''));
});
})
.on('error', function(err){
pass(err);
});
}
when(
function(pass){
get('www.google.com', pass);
},
function(pass){
get('news.ycombinator.com', pass);
},
function(pass){
get('io9.com', pass);
}
)
.then(function(results){
console.log(results);
});
@davidhamilton994
Copy link
Copy Markdown

I had been trying to improve organic visibility for a few client projects in the UAE but kept running into the same issue where traffic would fluctuate without any stable growth, and a colleague from digital marketing mentioned a structured approach he had seen in practice, which led me to explore SEO Agency in Dubai. I started applying a more organized process after that, but only after a few trial-and-error attempts with content and technical fixes did things begin to settle, with rankings becoming more consistent and the incoming traffic turning more relevant. It felt less like guessing and more like following a clear direction, so I’d recommend it if you want something that actually builds over time rather than short-lived results.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment