The equivalent of Array.some, i.e. to check whether if there's at least an element that passes a condition, I think it would be a combination of find
const some = (predicate) => source$ =>
source$.pipe(
find(predicate),
mapTo(true),
defaultIfEmpty(false)
);
This way, as soon as there's an element satisfying the predicate, you'll receive a true (and the observable would complete, as there won't be more values coming). And if none of them match, then you'll receive a false as soon as the source completes.
The upside of using this instead of negating every is that you can get the true as soon as it matches the predicate, instead of having to wait for the whole observable to complete.
Extra: note that find is an existing operator, but it's just sugar for filter(predicate) + take(1)
Edit: Oh! I didn't see that you don't have an Observable of numbers, but observable of functions that return observables of numbers.
In that case, you need to flatten it - And using the some operator described above:
from([fn1,fn2,fn2]).pipe( // where functions return Observable<number>
mergeMap(fn => fn()),
some(data => data > 100)
).subscribe(data => console.log(`result:${data}`)
Or if you don't want to declare your some operator, just use the internal bits directly:
from([fn1,fn2,fn2]).pipe( // where functions return Observable<number>
mergeMap(fn => fn()),
find(data => data > 100),
mapTo(true),
defaultIfEmpty(false)
).subscribe(data => console.log(`result:${data}`)
Note that you have 2 possible operators for flattening the observables: concatMap will subscribe to each observable one-by-one, waiting for the previous one to complete before subscribing to the next one (preserving the order of resolved values), while mergeMap will subscribe to all the observables as they keep coming (but then if a later observable is faster than a previous one, the values emitted won't be in the same order).