aboutsummaryrefslogtreecommitdiffstats
path: root/node_modules/rxjs/src/internal/AsyncSubject.ts
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/rxjs/src/internal/AsyncSubject.ts')
-rw-r--r--node_modules/rxjs/src/internal/AsyncSubject.ts39
1 files changed, 39 insertions, 0 deletions
diff --git a/node_modules/rxjs/src/internal/AsyncSubject.ts b/node_modules/rxjs/src/internal/AsyncSubject.ts
new file mode 100644
index 0000000..abb086c
--- /dev/null
+++ b/node_modules/rxjs/src/internal/AsyncSubject.ts
@@ -0,0 +1,39 @@
+import { Subject } from './Subject';
+import { Subscriber } from './Subscriber';
+
+/**
+ * A variant of Subject that only emits a value when it completes. It will emit
+ * its latest value to all its observers on completion.
+ */
+export class AsyncSubject<T> extends Subject<T> {
+ private _value: T | null = null;
+ private _hasValue = false;
+ private _isComplete = false;
+
+ /** @internal */
+ protected _checkFinalizedStatuses(subscriber: Subscriber<T>) {
+ const { hasError, _hasValue, _value, thrownError, isStopped, _isComplete } = this;
+ if (hasError) {
+ subscriber.error(thrownError);
+ } else if (isStopped || _isComplete) {
+ _hasValue && subscriber.next(_value!);
+ subscriber.complete();
+ }
+ }
+
+ next(value: T): void {
+ if (!this.isStopped) {
+ this._value = value;
+ this._hasValue = true;
+ }
+ }
+
+ complete(): void {
+ const { _hasValue, _value, _isComplete } = this;
+ if (!_isComplete) {
+ this._isComplete = true;
+ _hasValue && super.next(_value!);
+ super.complete();
+ }
+ }
+}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage