De Type "Abonnement" n'est pas cessible de type " Observables<SearchResult[]>' Angulaire 5 à l'aide de HttpClient au lieu de Http
Je suis en train d'utiliser la nouvelle classe HttpClient à la place de la vieille Http.
Je veux la carte sur les données que je reçois de la méthode subscribe, mais obtenir l'erreur ci-dessous. Toutes les suggestions sur les pourquoi-je l'obtenir?
Code:
export class YoutubeSearchService {
constructor(
private http: HttpClient,
@Inject(YOUTUBE_API_KEY) private apiKey: string,
@Inject(YOUTUBE_API_URL) private apiUrl: string,
) { }
search(query: string): Observable<SearchResult[]> {
const params: string = [
`q=${query}`,
`key=${this.apiKey}`,
`part=snippet`,
`type=video`,
`maxResults=10`,
].join("&");
const queryUrl = `${this.apiUrl}?${params}`;
return this.http.get(queryUrl).subscribe(data => {
data.map(item => {
return new SearchResult({
id: item.id.videoId,
title: item.snippet.title,
description: item.snippet.description,
thumbnailUrl: item.snippet.thumbnails.high.url,
});
});
});
}
}
Erreur:
ERROR in src/app/services/youtube-search.service.ts(26,5): error TS2322: Type 'Subscription' is not assignable to type 'Observable<SearchResult[]>'.
Property '_isScalar' is missing in type 'Subscription'.
src/app/services/youtube-search.service.ts(27,12): error TS2339: Property 'map' doesnot exist on type 'Object'.
OriginalL'auteur Isak La Fleur | 2017-11-10
Vous devez vous connecter pour publier un commentaire.
Votre
search
méthode retourne unsubscription
mais la signature prétend qu'il doit retourner unObservable<SearchResult[]>
Pour corriger ce soit de modifier la signature de votre méthode ou de modifier le
subscribe
àmap
Vous devez retirer la carte de
json
parce que le nouveauHttpClient
créé un objet json pour vous. Ainsi, vous pouvez parfaitement utiliser unmap
si vous souhaitez modifier l'objet retourné, ou tout simplement le supprimer.Si je fais cela (à l'aide de la carte au lieu de s'abonner) jsfiddle.net/2w8xsqdo
Je reçois Propriété "carte" n'existe pas sur le type " Observables<Object>'.
import 'rxjs/add/operator/map'
OriginalL'auteur Venomy
De retour Observables, utilisation:
et ne l'abonnement à l'appel de la fin.
Si vous avez besoin d'une carte de votre retour de l'objet de l'appel Http vers un objet différent. Ensuite, une solution serait de définir un sujet et à l'intérieur de votre abonnement, vous effectuez une opération suivante sur ce sujet.
Que pour la deuxième erreur, vous obtenez pour l'utilisation de la fonction map. Vous pouvez utiliser
de retour cette.http.get(queryUrl);
pour faire le compilateur de le voir comme un tableau au lieu d'un seul objet. Je ne suis pas sûr que ce ce que tu voulais faire ou pas.
OriginalL'auteur Sameh Awad
facilement , vous n'utilisez pas de valeur de retour.
OriginalL'auteur Omar