UNPKG

1.23 kBJavaScriptView Raw
1import { Observable } from "observable-fns";
2export { Observable };
3const $observers = Symbol("observers");
4/**
5 * Observable subject. Implements the Observable interface, but also exposes
6 * the `next()`, `error()`, `complete()` methods to initiate observable
7 * updates "from the outside".
8 *
9 * Use `Observable.from(subject)` to derive an observable that proxies all
10 * values, errors and the completion raised on this subject, but does not
11 * expose the `next()`, `error()`, `complete()` methods.
12 */
13export class Subject extends Observable {
14 constructor() {
15 super(observer => {
16 this[$observers] = [
17 ...(this[$observers] || []),
18 observer
19 ];
20 const unsubscribe = () => {
21 this[$observers] = this[$observers].filter(someObserver => someObserver !== observer);
22 };
23 return unsubscribe;
24 });
25 this[$observers] = [];
26 }
27 complete() {
28 this[$observers].forEach(observer => observer.complete());
29 }
30 error(error) {
31 this[$observers].forEach(observer => observer.error(error));
32 }
33 next(value) {
34 this[$observers].forEach(observer => observer.next(value));
35 }
36}