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

时间:2018-08-02 13:49:22

标签: javascript angular typescript

我正在尝试从观察到的函数中抛出错误,以便可以访问订阅的err部分,但似乎无法理解该部分。

3 个答案:

答案 0 :(得分:0)

我不确定如何通过地图方式进行操作,但这是另一种方式:

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;
  }

工作示例:https://stackblitz.com/edit/angular-mqp4qv?file=src/app/app.component.ts

答案 1 :(得分:0)

我将处理这些问题的方式。这是使用 _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';
        } )

    );
}

另一种方法是仅在登录组件中捕获错误

答案 2 :(得分:0)

我认为在组件的测试规范中,您需要模拟authServicelogin过程。该模拟不会进行http调用,只是在{password}与某些预定义值不匹配时立即通过throwError(new Error('Either username or password were incorrect'))引发错误。 Here是有关如何测试组件HTTP服务内容的一些示例,虽然有些过时,但从概念上讲仍然是实际的。