rxjs 5.5.2中的Observable.throw替换

时间:2017-11-03 14:00:41

标签: angular rxjs

我正在迁移到rxjs@5.5.2并使用lettable运算符...我还更新了Observable个静态方法。我想知道Observable.throwimport 'rxjs/add/observable/throw';的对应部分是什么。

我应该导入丑陋的_throw吗?

import { _throw } from 'rxjs/observable/throw';

或者有更好的方法。老实说我喜欢Observable上的静态方法,现在似乎应该从of导入所有静态创建方法,例如fromrxjs/observable/<methodName>

5 个答案:

答案 0 :(得分:29)

我仍然在5.5左右,但它现在看起来像而不是导入投掷使用 ErrorObservable

// import { _throw } from 'rxjs/observable/throw';
import { ErrorObservable } from 'rxjs/observable/ErrorObservable';

ErrorObservable.create('error');

从这个guide看起来它必须是 _throw 才能避免关键字冲突(视频的其余部分适合开始使用5.5)

答案 1 :(得分:21)

继续Mick的回答,在rxjs版本6中,_throwthrowError取代

 import {Observable, throwError} from 'rxjs'; 

RxJS Migration Guide

答案 2 :(得分:12)

_throw是正确的(这将完成JayChase编写的内容,但代码更少)。您对of执行相同的操作:

import {of} from 'rxjs/observable/of';
import {_throw} from 'rxjs/observable/throw';

// ...
   // ...
   if (result) {
       return of(result as T);
   } else {
       return _throw('error');
   }
}

答案 3 :(得分:3)

对于Angular 5及更高版本:

import{Http} from '@angular/http';
import {HttpClient,HttpResponse,HttpErrorResponse  } from '@angular/common/http';
import { Injectable} from '@angular/core'
import {Employee} from './employee';

import { Observable,throwError } from 'rxjs';
import { map,catchError } from 'rxjs/operators';  


@Injectable() 
export class employeeService{
constructor(private _http:Http){  }
 getEmployees():Observable<Employee[]>{
    return this._http.get('YOUR URL')
                     .pipe(
                         map((res: Response) => res.json()),
                         catchError(this.handleError)
                        );
                     //.pipe(catchError(this.handleError));
 }
 handleError(error:HttpErrorResponse){
    console.log(error);
    return throwError(error.message);
 }    
}

答案 4 :(得分:0)

如果您想使用哪一个-ErrorObservable vs _throw,则来自5.5.2源核心

RxJs library 5.5.2 - throw.ts file

import {  ErrorObservable  } from './ErrorObservable';

export const _throw = ErrorObservable.create;

所以,没关系。