title: Why isn't this throwError being caught in catchError?
body: <p>I am trying to create a pipeable operator and throw when particular conditions not met..  I am unable to throw and catch the error however.</p>
  
  <p>This is my pipeable:</p>
  
  <pre class="lang-js prettyprint-override"><code>// My custom pipeable
  export function waitFor&lt;T&gt;(thisToComplete$: Observable&lt;any&gt;) {
    return (beforeRunningThis$: Observable&lt;T&gt;) =&gt; {
      return new Observable&lt;T&gt;(observer =&gt;
        thisToComplete$.pipe(first()).subscribe(x =&gt; {
          if (x !== 'Success') {
            console.log('Non success result encountered');
            return throwError('Rando IO Error');
          }
          return beforeRunningThis$.subscribe(observer);
        })
      );
    }
  }
  </code></pre>
  
  <p>And consuming code:</p>
  
  <pre class="lang-js prettyprint-override"><code>const preReq$ = timer(1000);
  const dataReq$ = getData();
  
  try {
    dataReq$
      .pipe(waitFor(preReq$), catchError(x =&gt; {
        console.log('Code here reached');
        return of('Error was handled either here')
      }))
      .subscribe(x =&gt; console.log(`I have result ${x.toString()}`));
  } catch (e) {
    console.log('Error was handled here');
  }
  </code></pre>
  
  <p>None of the above consoles log however.</p>
  
  <p>Here is a <a href="https://stackblitz.com/edit/rxjs-error-propogation-with-pipable?file=src/app/app.component.ts" rel="nofollow noreferrer">stackblitz</a></p>