J'ai suivi ce format dans mon application pour communiquer avec l'API et y récupérer des données.Refactoring de code de service angulaire
Voici le code de l'un des service.ts
getCheckoutDetails(): Observable<UserDetail> {
let query = `7668`;
return this.http
.get(this.appConfig.getAPIUrl()
+ `/buy/getDetails?${query}`)
.map(this.extractData)
.catch(this.handleErrors);
}
private extractData(res: Response) {
let data = res.json();
return data.body ? data.body.message ? data.body.message : {} : {};
}
private handleErrors(error: Response | any) {
let errMsg: string;
if (error instanceof Response) {
const body = error.json() || '';
const err = body.error || JSON.stringify(body);
errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
} else {
errMsg = error.message ? error.message : error.toString();
}
console.error(errMsg);
return Observable.throw(errMsg);
}
Maintenant, nous utilisons cpd
pour détecter la duplication de code dans l'application et il se plaint que partout où j'utilise extractData
et handleErrors
le code est dupliqué.
Existe-t-il une meilleure façon de gérer cela en utilisant la classe de base?
Voulez-vous quelque chose comme 'getCheckoutDetails() {laisser query = '7668'; retourner this.get ('/ buy/getDetails? $ {query}')} 'et toute la logique sera à l'intérieur du service de base? – yurzui
merci @yurzui l'afficher comme réponse. je vais le marquer – Sajeetharan