ReactiveX/rxjs · error · Error
Scheduler-backed publishReplay is not supported by this Symb
Error message
Scheduler-backed publishReplay is not supported by this Symbol contract.
What it means
publishReplay in RxJS Next drops scheduler support. If the 5th positional argument (scheduler) is not undefined, or the 4th argument (selectorOrScheduler) is supplied but is not a function (i.e. it's a legacy scheduler object), it throws the scheduler error.
Source
Thrown at packages/rxjs/src/publish-replay.ts:40
[publishReplay](
bufferSize: number | undefined,
windowTime: number | undefined,
selector: undefined,
scheduler: PublishReplayTimestampProvider
): ConnectableObservable<T>;
[publishReplay](bufferSize?: number, windowTime?: number, scheduler?: PublishReplayTimestampProvider): ConnectableObservable<T>;
}
}
Observable.prototype[publishReplay] = function <T, Selected extends ObservableValue<unknown>>(
this: Observable<T>,
bufferSize?: number,
windowTime?: number,
selectorOrScheduler?: ((shared: Observable<T>) => Selected) | unknown,
scheduler?: unknown
): ConnectableObservable<T> | Observable<ObservedValueOf<Selected>> {
if (scheduler !== undefined) {
throw new Error(SCHEDULER_ERROR);
}
const selector = typeof selectorOrScheduler === 'function' ? (selectorOrScheduler as (shared: Observable<T>) => Selected) : undefined;
if (selectorOrScheduler !== undefined && !selector) {
throw new Error(SCHEDULER_ERROR);
}
const subject = replaySubject<T>({
size: bufferSize,
maxAge: windowTime,
});
if (selector) {
return this[multicast](subject, selector);
}
// RxJS 7 retains one ReplaySubject for the lifetime of every publishReplay
// result, including selector-form results that are later retried or repeated.View on GitHub (pinned to 54796b38a5)
Solutions
- Remove the scheduler argument; accept synchronous replay buffering
- Use bufferSize/windowTime only: obs[publishReplay](3, 500)
- For testing timing, wrap the result in TestScheduler marble tests instead of an inline scheduler
Example fix
// before source[publishReplay](3, 500, undefined, asyncScheduler); // after source[publishReplay](3, 500);
Defensive patterns
Strategy: validation
Validate before calling
if (arguments.length > 3) throw new TypeError('scheduler not supported');
obs[publishReplay](bufferSize, windowTime, selector); Prevention
- Remove scheduler arguments before migrating to RxJS Next
- Prefer shareReplay config for replay semantics
When it happens
Trigger: obs[publishReplay](3, 500, undefined, asyncScheduler) or obs[publishReplay](3, 500, someSchedulerObject) where the 4th arg isn't a selector function.
Common situations: RxJS 7 code that scheduled replay emission with a scheduler running unchanged; passing null/undefined slots plus a scheduler positionally.
Related errors
- RxJS Next expand does not support a scheduler argument.
- Scheduler-backed generate is not supported by this Symbol co
- Scheduler-backed shareReplay is not supported by this Symbol
- A combineLatest projection requires an array of observable v
- RxJS Next expand options must be an object.
AI-assisted analysis of ReactiveX/rxjs@54796b38a5 (2026-08-28).
Data as JSON: /api/errors/b6d38a6ecc5e4a19.
Report an issue: GitHub.