J'ai appris Angular 4 et tout se passait bien jusqu'à ce que j'essaie de mettre en œuvre la gestion des captures dans un service. J'essaie d'utiliser catch et throw de "rxjs" mais j'ai une erreur de fonction indéfinie dans ma console.
import { Injectable } from '@angular/core';
import { Http } from "@angular/http";
import { Observable } from 'rxjs/observable';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
import { AppError } from "../app/common/app.error";
import { NotFoundError } from "../app/common/not-found-error";
import { BadInput } from "../app/common/bad-input";
@Injectable()
export class PostService {
private url = "https://jsonplaceholder.typicode.com/posts";
constructor(private http: Http) { }
deletepost(post){
// return this.http.delete(this.url + '/' + post.id)
// Hard-coded id to test 404
return this.http.delete(this.url + '/' + 93498)
.catch((error: Response) => {
console.log('error within catch is ' + Response)
if(error.status === 404)
return Observable.throw(new NotFoundError(error));
return Observable.throw(new AppError(error));
});
}
}
Voici le message d'erreur :
TypeError: __WEBPACK_IMPORTED_MODULE_2_rxjs_observable__["Observable"].throw is not a function.
(In '__WEBPACK_IMPORTED_MODULE_2_rxjs_observable__["Observable"].throw(new
__WEBPACK_IMPORTED_MODULE_6__app_common_not_found_error__["a" /* NotFoundError
*/](error))',
'__WEBPACK_IMPORTED_MODULE_2_rxjs_observable__["Observable"].throw' is
undefined) — post.service.ts:42
J'ai également cet avertissement dans mon navigateur :
./~/rxjs/Observable.js
There are multiple modules with names that only differ in casing.
This can lead to unexpected behavior when compiling on a filesystem with other case-semantic.
Use equal casing. Compare these module identifiers:
* /Users/nickgowdy/Desktop/Angular2/angular4 source code/hello-world/node_modules/rxjs/Observable.js
Used by 14 module(s), i. e.
/Users/nickgowdy/Desktop/Angular2/angular4 source code/hello-world/node_modules/@angular/core/@angular/core.es5.js
* /Users/nickgowdy/Desktop/Angular2/angular4 source code/hello-world/node_modules/rxjs/observable.js
Used by 1 module(s), i. e.
/Users/nickgowdy/Desktop/Angular2/angular4 source code/hello-world/node_modules/@ngtools/webpack/src/index.js!/Users/nickgowdy/Desktop/Angular2/angular4 source code/hello-world/src/services/post.service.ts
1 votes
Essayez d'importer
import { Observable } from 'rxjs/Observable';
avec un "O" majuscule au lieu deimport { Observable } from 'rxjs/observable';
avec un "o" minuscule et voir si cela fait une différence.0 votes
@AlexanderStaroselsky Wow je ne peux pas croire que c'était la raison. Je n'ai pas remarqué que c'était une majuscule O parce que cela ne correspond pas à la convention de dénomination de toutes les autres dépendances importées. Vous devriez publier cette réponse pour que je puisse la marquer comme correcte.
0 votes
J'ai connu la même chose, l'erreur n'est pas toujours claire. Cela vous dérange si je mets cela comme réponse afin que d'autres personnes rencontrant ce problème puissent trouver une solution ?
0 votes
@AlexanderStaroselsky Oui, vas-y. Créez une réponse à cette question et je la marquerai comme correcte. Merci pour votre aide.