Skip to content

Instantly share code, notes, and snippets.

@traviskaufman
Last active October 18, 2019 17:56
Show Gist options
  • Save traviskaufman/a91b8af45f317840bd66514e13ce59e3 to your computer and use it in GitHub Desktop.
Save traviskaufman/a91b8af45f317840bd66514e13ce59e3 to your computer and use it in GitHub Desktop.
Demystifying RxJS Part I: Observable Implementation
interface Observer<T> {
next(value: T): void;
error(err: any): void;
complete(): void;
}
interface Subscription {
unsubscribe(): void;
}
class Observable<T> {
constructor(
private observe: (observer: Observer<T>) => (() => void) | void
) {}
subscribe(
next?: (value: T) => void,
error?: (err: any) => void,
complete?: () => void
): Subscription {
const observer: Observer<T> = {
next: (value: T) => {
if (next) next(value)
},
error: (err: any) => {
if (error) error(err);
},
complete: () => {
if (complete) complete();
}
};
const teardown = this.observe(observer);
return {
unsubscribe: () => {
if (teardown) teardown();
}
};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment