Skip to content

Instantly share code, notes, and snippets.

@sjkillen
Created December 12, 2017 00:24
Show Gist options
  • Save sjkillen/5c1b8d32e5bfc8d5863778e2976f4799 to your computer and use it in GitHub Desktop.
Save sjkillen/5c1b8d32e5bfc8d5863778e2976f4799 to your computer and use it in GitHub Desktop.
class ProxyPromise extends Promise {
constructor(...args) {
super(...args);
return new Proxy(this, {
get(target, property, receiver) {
if (property in target) {
const prop = Reflect.get(target, property, receiver);
if (typeof prop === "function") {
return prop.bind(target);
} else {
return prop;
}
} else {
return (...args) =>
new ProxyPromise((resolve, reject) =>
target.then(v => resolve(v[property](...args)))
.catch(reject)
);
}
}
});
}
}
const obj = {
doStuff() {
return {
doMoreStuff() {
return console.log("Work Work")
}
};
}
};
ProxyPromise.resolve(obj).doStuff().doMoreStuff();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment