【问题标题】:Observable.throw replacement in rxjs 5.5.2rxjs 5.5.2 中的 Observable.throw 替换
【发布时间】:2017-11-03 14:00:41
【问题描述】:

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

我应该导入丑陋的_throw吗?

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

或者有更好的方法。老实说,我喜欢Observable 上的静态方法,现在似乎所有像offrom 这样的静态创建方法都应该从rxjs/observable/<methodName> 导入?

【问题讨论】:

  • 有同样的问题。不幸的是,5.5 文档只提到了(现在是“lettable”)运算符,而不是静态方法。导入静态方法的缺点是它们的名称非常短,缺乏可观察的上下文,并且看起来更像语法元素(“from”和“of”),甚至与关键字重合(“throw”和“if”)。因此,我倾向于使用别名导入它们(“_throw”为“ObservableThrow”,“of”为“ObservableOf”,或“empty”为“EmptyObservable”)。
  • 当然,我们仍然可以使用旧的导入 'rxjs/add/...' 的方法,但这与操作符的缺点相同。

标签: angular rxjs


【解决方案1】:

我的头还在 5.5 左右,但现在看起来不像导入 throw 使用 ErrorObservable

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

ErrorObservable.create('error');

guide 看来,它必须是 _throw 以避免关键字冲突(视频的其余部分非常适合 5.5 入门)

【讨论】:

  • 您可以通过使用 _throw('error') 更轻松地做到这一点,它完全符合您的要求,但编写的代码更少
【解决方案2】:

继续 Mick 的回答,在 rxjs 版本 6 中,_throw 被替换为 throwError

 import {Observable, throwError} from 'rxjs'; 

RxJS Migration Guide

【讨论】:

  • 这个问题是5.5.2特有的吧?
  • 是的,但是谷歌给出了它作为 6.x.x 的答案,我跳过了最新的 5.x.x 直接到 6。很多人(比如我)甚至不知道 _throw 函数。跨度>
【解决方案3】:

是的_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');
   }
}

【讨论】:

  • 在版本 6 中,_throw 现在导出为 throwError : import {Observable, throwError} from 'rxjs';
  • @bleuscyther - 为了搜索者的利益,您应该将此作为答案。我刚刚浏览了几页 SO 答案,但您的评论现在是正确答案。谢谢。
  • 好的,如果@Mick 在他的答案中附加了会更好,但以防万一我会和答案
  • 这个问题是 5.5.2 特有的,所以我想我就这样吧?
【解决方案4】:

对于 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);
 }    
}

【讨论】:

    【解决方案5】:

    如果您想知道使用哪一个 - ErrorObservable vs _throw,这里有一些来自 5.5.2 源核心的东西

    RxJs library 5.5.2 - throw.ts file
    
    import {  ErrorObservable  } from './ErrorObservable';
    
    export const _throw = ErrorObservable.create;
    

    所以,没关系。

    【讨论】:

      猜你喜欢
      • 2018-01-09
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 2018-12-10
      • 2019-07-09
      相关资源
      最近更新 更多