Rxjs - check if Observable is empty, without subscribing to it

You can try using defaultIfEmpty operator (see description). Supposed your advertsPerUser return a number you could do this:

this.adverts$ = this.advertService.advertsPerUser().map(count => count > 0).defaultIfEmpty(false);

in html:

<div *ngIf="adverts$ | async">

or with rxjs version 6:

this.adverts$ = this.advertService.advertsPerUser().pipe(
    map(count => count > 0),
    defaultIfEmpty(false)
);

I had a similar issue where i wanted to check if my response, which is an array of a custom type, was empty or not. Here is my solution

<div *ngIf="(response$ | async).length == 0">
    <p>no results</p>
</div>

In short, no.

By default Observable is unicast behaves similar to function, so emits value to observer once it is actually subscribed. It is important it is similar to function, subscribing is actual attempt to start those observables. If you think of typical function returns a value (or not), you won't be able to know until function is actually executes and returns its results. Same applies for Observable as well you can't have source's values until you subscribe it.