Comments (1)
This is clearly a bug, the observer should synchronously unsubscribed from the source as soon as it observes a value that doesn't meet the criteria.
If you were using v7, then you could use the following custom implementation which doesn't suffer from this bug:
const customEvery =
<T>(cb: (value: T, idx: number, source: Observable<T>) => boolean) =>
(source: Observable<T>): Observable<boolean> =>
new Observable((observer) => {
let index = 0;
const subscriber = new Subscriber<T>({
next(value: T) {
if (!cb(value, index++, source)) {
subscriber.unsubscribe();
observer.next(false);
observer.complete();
}
},
error(e: unknown) {
observer.error(e);
},
complete() {
observer.next(true);
observer.complete();
},
});
source.subscribe(subscriber);
return subscriber;
});
I can't help to wonder what the official way of building a custom operator like that is for v8 🤔
EDIT:
I think that I found it. The new way of doing the equivalent in RxJS 8 would be:
const every =
<T>(cb: (value: T, idx: number, source: Observable<T>) => boolean) =>
(source: Observable<T>): Observable<boolean> =>
new Observable((observer) => {
let index = 0;
const subscriber = operate<T, boolean>({
destination: observer,
next(value: T) {
if (!cb(value, index++, source)) {
subscriber.unsubscribe();
observer.next(false);
observer.complete();
}
},
error(e: unknown) {
observer.error(e);
},
complete() {
observer.next(true);
observer.complete();
},
});
source.subscribe(subscriber);
return subscriber;
});
Example
props to @voliva for helping me out 😉
from rxjs.
Related Issues (20)
- rxjs.dev very often inaccessible HOT 10
- export map means node always resolves CJS HOT 7
- RxJs ships generators instead of native async/await HOT 1
- bindCallback: resultSelector destructuring callback argument if it's array HOT 1
- [email protected] has peer deps?! Oops
- ObservableInput<T> should support Thennable<T>, not PromiseLike<T> HOT 1
- Delay, timer and possibly other operators have a maximum milliseconds value, even when date is passsed HOT 1
- lost stacktrace after promise is resolved HOT 1
- Teardown and error/complete messages are out of order HOT 2
- Issue with catchError HOT 1
- Synchronous emit to `switchMap` during the processing of previous emit prevents the first from unsubscribing HOT 4
- False positive in deprecation with mergMap HOT 1
- it's possible to return an array in catchError() HOT 2
- tap-complete not called for last observable inside zip HOT 1
- Interface SchedulerLike not exported from index file
- distintUntilChanged: new overload missing in bundle HOT 1
- pluck operator is a standard operator it is also available in Lodash and Ramda - It belongs into the library!
- Simplify the Observable pipe with the help of Typescript Variadic Functions HOT 1
- iif subscriptions HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rxjs.