angular - hvordan lage en funksjon som returnerer Observable etter verifiseringer?
Jeg vil returnere en http.get-observable etter å ha sjekket om tokenet er gyldig og deretter fått riktig URL. Til slutt returnerer jeg en get-observable. Jeg skrev denne koden, men den kompilerer ikke, feil: En funksjon hvis deklarerte type verken er 'void' eller 'any' må returnere en verdi.
getListObs<T>(target):Observable<T>{
this.tokenifyObs().subscribe(
token => {
console.log("get list of objects ")
return Observable.create(observer => {
let myUrl = this.urls_list[this.baseUrl] + this.urls_list[target];
observer.next(myUrl);
})
.subscribe( (myUrl)=>{
return this.http.get<T[]>(myUrl)
})
})
}
kode for tokenifyOsb-metoden:
tokenifyObs():Observable<String>{
return Observable.create(observer => {
console.log("checking token.. ")
if(! this.token){
let token = sessionStorage.getItem("token")
this.token = token
this.header.headers["authorization"] = this.auth + token;
this.validAuth = true
}
console.log("token is : ", this.token)
observer.next(this.token);
})
}
Svar #1
Feilen du får betyr at du spesifiserte returtypen for metoden din getListObs<T>(target):Observable<T> men du returnerer ingenting. Enkelte kan skrive return this.tokenifyObs().subscribe(... for å fjerne Typescript-feilen. Dette vil imidlertid returnere et abonnement, ikke et Observable. Du trenger ikke å abonnere i denne metoden, bare returner observable. Jeg har ikke sett hele koden din, men jeg antar at dette er hvor du kan starte:
getListObs<T>(target):Observable<T>{
return this.tokenifyObs()
.switchMap(token => { // you are not using token anywhere so you can replace it with ()
let myUrl = this.urls_list[this.baseUrl] + this.urls_list[target];
return this.http.get<T>(myUrl);
});
}
