Skip to content

Instantly share code, notes, and snippets.

@zuk
Last active August 4, 2018 18:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zuk/60395589c2280ff4f623 to your computer and use it in GitHub Desktop.
Save zuk/60395589c2280ff4f623 to your computer and use it in GitHub Desktop.
Proto-Proimse
function Promise() { };
Promise.prototype = {
then: function(cb) {
var p = new Promise();
this.resolve = function(v) {
var value = cb(v);
if (p.resolve) p.resolve(value);
};
return p;
}
}
function somethingAsync() {
var p = new Promise();
setTimeout(function () { p.resolve(42); }, 1000);
return p;
}
somethingAsync()
.then(function (v) { console.log(v); return v * 2 })
.then(function (v2) { console.log(v2); return v2 * 3 })
.then(function (v3) { console.log(v3); });
// simulate async data retrieval
function retrieveTemperatureFromRemote(cb) {
setTimeout(function() { cb(42) }, 1000)
}
class Promise2 {
resolve(v) { console.log("resolve", this); this.result = v }
then(cb) {
console.log("then", this)
if (this.result !== undefined)
cb(this.result)
else
this.resolve = cb
}
}
function promiseRetrieveTemperatureFromRemote() {
var promise = new Promise2()
retrieveTemperatureFromRemote(v => promise.resolve(v))
return promise
}
var p = promiseRetrieveTemperatureFromRemote()
// simulate async data retrieval
function retrieveTemperatureFromRemote(cb) {
setTimeout(function() { cb(42) }, 1000)
}
function promiseRetrieveTemperatureFromRemote() {
var result = undefined
var resolve = v => result = v
var then = (cb) => {
if (result !== undefined)
cb(result)
else
resolve = cb
}
retrieveTemperatureFromRemote(v => resolve(v) )
return {
then: then
}
}
var p = promiseRetrieveTemperatureFromRemote()
p.then(v => console.log(v))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment