40 votes

Remplacement de Observable.throw dans rxjs 5.5.2

Je migre vers rxjs@5.5.2 et l'utilisation d'opérateurs lettables... Je mets également à jour Observable méthodes statiques. Je me demande quelle est la contrepartie de Observable.throw y import 'rxjs/add/observable/throw'; .

Dois-je importer des produits laids _throw ?

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

Ou il y a un meilleur moyen. Honnêtement, j'aimais bien les méthodes statiques sur Observable et maintenant, il semble que toutes les méthodes de création statique telles que of , from doit être importé de rxjs/observable/<methodName> ?

3 votes

J'ai eu la même question. Malheureusement, la documentation de la version 5.5 ne mentionne que les opérateurs (désormais "lettables"), mais pas les méthodes statiques. L'inconvénient de l'importation des méthodes statiques est qu'elles ont des noms très courts, sans contexte observable et ressemblant plus à des éléments de syntaxe ("from" et "of"), voire coïncidant avec des mots-clés ("throw" et "if"). J'ai donc tendance à les importer avec des noms d'alias ("_throw" comme "ObservableThrow", "of" comme "ObservableOf", ou "empty" comme "EmptyObservable").

1 votes

Bien sûr, nous pouvons toujours utiliser l'ancienne méthode d'importation 'rxjs/add/...', mais cela présente les mêmes inconvénients que pour les opérateurs.

39voto

JayChase Points 5565

Je suis encore en train de me familiariser avec la version 5.5, mais il semble qu'au lieu d'importer, throw utilise maintenant ErrorObservable .

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

ErrorObservable.create('error');

De ce guide on dirait que ça doit être Lancer pour éviter un conflit de mots-clés (le reste de la vidéo est utile pour commencer à utiliser 5.5)

0 votes

Vous pouvez le faire plus facilement en utilisant _throw('error') qui fait exactement ce que vous faites mais avec moins de code à écrire.

36voto

bleuscyther Points 1076

Dans le prolongement de la réponse de Mick, dans la version 6 de rxjs _throw est remplacé par throwError

 import {Observable, throwError} from 'rxjs'; 

Guide de migration RxJS

0 votes

Cette question est spécifique à la version 5.5.2, n'est-ce pas ?

2 votes

Oui mais google le donne comme une réponse pour 6.x.x j'ai sauté la dernière 5.x.x pour aller directement à 6. Beaucoup de gens (comme moi) ne connaissent même pas la fonction _throw.

13voto

Mick Points 1717

Oui _throw est correct (cela fera exactement ce que JayChase a écrit mais avec moins de code). Vous faites la même chose avec of :

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

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

1 votes

Dans la version 6, _throw est maintenant exporté en tant que throwError : import {Observable, throwError} de 'rxjs' ;

0 votes

@bleuscyther - Vous devriez mettre ceci comme réponse pour le bénéfice des chercheurs. Je viens de parcourir des pages de réponses aux questions sur le SO, mais votre commentaire est maintenant la bonne réponse. Merci.

0 votes

Ok, ce serait mieux si @Mick ajoutait le à sa réponse, mais juste au cas où, je vais ajouter la réponse.

6voto

srinivassree Points 39

Pour Angular 5 et plus :

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

1voto

Si vous vous demandez lequel utiliser - ErrorObservable ou _throw, voici un extrait du noyau source de la version 5.5.2

RxJs library 5.5.2 - throw.ts file

import {  ErrorObservable  } from './ErrorObservable';

export const _throw = ErrorObservable.create;

Donc, ça n'a pas d'importance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X