UNPKG

2.72 kBTypeScriptView Raw
1import { Observable } from '../Observable';
2import { ConnectableObservable } from '../observable/ConnectableObservable';
3import { UnaryFunction } from '../types';
4/**
5 * Returns a connectable observable sequence that shares a single subscription to the
6 * underlying sequence containing only the last notification.
7 *
8 * ![](publishLast.png)
9 *
10 * Similar to {@link publish}, but it waits until the source observable completes and stores
11 * the last emitted value.
12 * Similarly to {@link publishReplay} and {@link publishBehavior}, this keeps storing the last
13 * value even if it has no more subscribers. If subsequent subscriptions happen, they will
14 * immediately get that last stored value and complete.
15 *
16 * ## Example
17 *
18 * ```ts
19 * import { ConnectableObservable, interval, publishLast, tap, take } from 'rxjs';
20 *
21 * const connectable = <ConnectableObservable<number>>interval(1000)
22 * .pipe(
23 * tap(x => console.log('side effect', x)),
24 * take(3),
25 * publishLast()
26 * );
27 *
28 * connectable.subscribe({
29 * next: x => console.log('Sub. A', x),
30 * error: err => console.log('Sub. A Error', err),
31 * complete: () => console.log('Sub. A Complete')
32 * });
33 *
34 * connectable.subscribe({
35 * next: x => console.log('Sub. B', x),
36 * error: err => console.log('Sub. B Error', err),
37 * complete: () => console.log('Sub. B Complete')
38 * });
39 *
40 * connectable.connect();
41 *
42 * // Results:
43 * // 'side effect 0' - after one second
44 * // 'side effect 1' - after two seconds
45 * // 'side effect 2' - after three seconds
46 * // 'Sub. A 2' - immediately after 'side effect 2'
47 * // 'Sub. B 2'
48 * // 'Sub. A Complete'
49 * // 'Sub. B Complete'
50 * ```
51 *
52 * @see {@link ConnectableObservable}
53 * @see {@link publish}
54 * @see {@link publishReplay}
55 * @see {@link publishBehavior}
56 *
57 * @return A function that returns an Observable that emits elements of a
58 * sequence produced by multicasting the source sequence.
59 * @deprecated Will be removed in v8. To create a connectable observable with an
60 * {@link AsyncSubject} under the hood, use {@link connectable}.
61 * `source.pipe(publishLast())` is equivalent to
62 * `connectable(source, { connector: () => new AsyncSubject(), resetOnDisconnect: false })`.
63 * If you're using {@link refCount} after `publishLast`, use the {@link share} operator instead.
64 * `source.pipe(publishLast(), refCount())` is equivalent to
65 * `source.pipe(share({ connector: () => new AsyncSubject(), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false }))`.
66 * Details: https://rxjs.dev/deprecations/multicasting
67 */
68export declare function publishLast<T>(): UnaryFunction<Observable<T>, ConnectableObservable<T>>;
69//# sourceMappingURL=publishLast.d.ts.map
\No newline at end of file