Javascript 订阅/可观察到的抛出错误-Angular2+;

Javascript 订阅/可观察到的抛出错误-Angular2+;,javascript,angular,typescript,Javascript,Angular,Typescript,我试图从我观察到的函数中抛出一个错误,这样我就可以访问订阅的err部分,但我似乎无法访问该部分。我不确定如何通过映射方式进行操作,但这里有一种不同的方式: import { Observable, of, throwError } from 'rxjs'; ngOnInit() { this.getObs().subscribe(data => { console.log(data); }, err => { console.log(er

我试图从我观察到的函数中抛出一个错误,这样我就可以访问订阅的
err
部分,但我似乎无法访问该部分。

我不确定如何通过映射方式进行操作,但这里有一种不同的方式:

import { Observable, of, throwError } from 'rxjs';

  ngOnInit() {
    this.getObs().subscribe(data => {
      console.log(data);
    }, err => {
      console.log(err);
    });
  }

  getObs() {    
    const observable = of(6);
    const isError = true;
    if (isError) {
      return throwError("Is an error!");
    }
    return observable;
  }

工作示例:

我可以用几种方法来处理这个问题。这里有一种方法可以使用\u-throw

// auth.ts
import { _throw } from 'rxjs/observable/throw';

login( username, password ) {

    const body = this.jsonifyData( username, password );

    return this.http.post<any>( this.apiBaseUrl + '/auth', body )
        .pipe(
        map( res => {
            if ( 'token' in res ) {
                return res.token;
            }
            // Unsuccessful login returns error
            return _throw( res ); // from import {_throw} from 'rxjs/observable/throw';
        } )

    );
}
//auth.ts
从“rxjs/observable/throw”导入{u throw};
登录(用户名、密码){
const body=this.jsonifyData(用户名、密码);
返回this.http.post(this.apiBaseUrl+'/auth',body)
.烟斗(
地图(res=>{
if('token'在res中){
返回res.token;
}
//不成功的登录返回错误
返回_-throw(res);//从'rxjs/observable/throw'导入{u-throw};
} )
);
}

另一种方法是捕获登录组件中的错误,我认为在组件的测试规范中,您需要模拟您的
authService
login
过程。这个模拟不进行http调用,只要通过抛出器抛出一个错误(新错误('用户名或密码不正确')),如果密码与某个预定义值不匹配,就立即抛出。是如何测试组件http服务的一些示例,它有点过时,但在概念上仍然是实际的。

什么是“return-throwError(res)”;它来自
import{throwError}来自'rxjs/index'使用返回抛出器(新错误(res))@SureshKumarAriya-我仍然无法获得
组件。errorMessage
被视为我所期望的:-/尝试用stackblitz或plunkr上的简化示例重新创建它-人们将更容易提供帮助。