-
Notifications
You must be signed in to change notification settings - Fork 3k
Closed
Labels
TSIssues and PRs related purely to TypeScript issuesIssues and PRs related purely to TypeScript issueshelp wantedIssues we wouldn't mind assistance with.Issues we wouldn't mind assistance with.
Description
Currently we have a variety of ways you can use subscribe
and tap:
o.subscribe(fn, fn, fn);
o.subscribe(fn, fn);
o.subscribe(fn);
o.subscribe(void, void, fn);
o.subscribe(void, fn, fn);
o.subscribe(void, fn);
o.subscribe(observer);
o.pipe(tap(fn, fn, fn));
o.pipe(tap(fn, fn));
o.pipe(tap(fn));
o.pipe(tap(void, void, fn));
o.pipe(tap(void, fn, fn));
o.pipe(tap(void, fn));
o.pipe(tap(observer));
It's been my personnel recommendation that people stick to the following two signatures:
o.subscribe(fn);
o.subscribe(observer);
// or likewise with tap:
o.pipe(tap(fn));
o.pipe(tap(observer));
The reason being is:
// POOR readability (I have to count arguments?)
o.subscribe(null, null, () => {
// side effect here
});
// BETTER readability
o.subscribe({
complete() {
// side effect here
}
});
// GOOD readability
o.subscribe(x => {
// side effect here
});
// GOOD readability (if unnecessarily verbose)
o.subscribe({
next(x) {
// side effect here
}
});
Proposal
I'd like to deprecate the other signatures to subscribe
and tap
, and narrow down the signature to just those two prescribed above for the next major version
Pros
- Simplify subscription code slightly.
- Simpler typing for TypeScript.
- Guides people into writing cleaner, more readable code
Cons
- The behavior around handling errors at the point of subscription may get a slightly harder to control, with only one way of adding error handling at subscription time. (NOTE: errors should really be handled by a
catchError
orretry
-type operator, rather than in the subscribe.)
Other thoughts
It would also be good to add some lint rules around this to rxjs-tslint and the like.
jgbpercy, ajcrites, MarioGruda, kyranjamie, olaf89 and 35 morebschmidt72vighnesh153
Metadata
Metadata
Assignees
Labels
TSIssues and PRs related purely to TypeScript issuesIssues and PRs related purely to TypeScript issueshelp wantedIssues we wouldn't mind assistance with.Issues we wouldn't mind assistance with.