Skip to content

Instantly share code, notes, and snippets.

@thiagoh
Created May 27, 2019 18:49
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 thiagoh/c24310b562d50a14f3e7602a82b4ef13 to your computer and use it in GitHub Desktop.
Save thiagoh/c24310b562d50a14f3e7602a82b4ef13 to your computer and use it in GitHub Desktop.
resolve/reject a promise from outside its scope
export interface ExternalizedPromise<T> {
promise: Promise<T>;
resolve: (value?: T | PromiseLike<T>) => void;
reject: (reason?: any) => void;
}
export default {
create: function create<T>(
executor: (resolve: (value?: T | PromiseLike<T>) => void, rejector: (reason?: any) => void) => void
): ExternalizedPromise<T> {
let resolve;
let reject;
const promise = new Promise<T>((paramResolve, paramReject) => {
resolve = paramResolve;
reject = paramReject;
executor(resolve, reject);
});
return {
resolve,
reject,
promise,
};
},
resolve: function resolve<T>(value?: T) {
const externalizedPromise = this.create((_resolve) => _resolve(value));
externalizedPromise.resolve();
return externalizedPromise;
},
reject: function reject<T>(value?: T) {
const externalizedPromise = this.create((_, _reject) => _reject(value));
externalizedPromise.resolve();
return externalizedPromise;
},
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment