¿Cómo funciona el manejo de errores HTTP con observables?

Veo muchos tutoriales haciendo algo como esto:

http.get("...").subscribe(
  success => console.log('hello success'),
  error => console.log('bye error')
);

No sé cómo funciona esto, ya que no hay ningún tipo ni nada,sin embargo Traté de hacerlo yo mismo y termino que la solicitud siempre tiene éxito, incluso si tengo un error. ¿Cuál es el problema?

Alborotador:

this.memberService.create(this.currentMember)
      .subscribe(
        success => {
          let mem: Member = success.json() as Member;
          if (this.selectedOrganization) {
            this.addMemberToOrganization(mem);
          } else if (this.selectedServiceProvider) {
            this.addMemberToServiceProvider(mem);
          } else {
            this.toastsService.error("lbl_users_service_provider_and_organization_undefined");
          }
        },
        error => console.log(error)
      );

Create-Method en el memberService:

  create(member: Member): Observable<any> {
    return this.http
      .post(this.RESOURCE_BASE_URL, member)
      .map(response => {
        if (response.status === 200) this.toastsSerivce.success(this.translateService.instant('lbl_users_member_created'));
        return response;
      })
      .catch(error => this.toastsSerivce.error(this.translateService.instant('lbl_users_member_create_failed')));
  }

Incluso capto el error, pero elsubscribe parte no parece importarle. Falla ensuccess.json(), porque si hay un error, no hayjson. Pero si hay un error, quiero que llame alerror =>... en vez desuccess. Cualquier consejo es muy apreciado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta