angular - doğrulamalardan sonra Observable döndüren fonksiyon nasıl oluşturulur?
Token'in geçerli olup olmadığını kontrol ettikten ve doğru URL'i aldıktan sonra bir http.get gözlemleneni döndürmek istiyorum, sonunda bir get gözlemleneni döndürüyor. Bu kodu yazdım, ama derlenmiyor, hata: Bildirilen türü ne 'void' ne de 'any' olan bir fonksiyon değer döndürmek zorundadır.
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)
})
})
}
tokenifyOsb yönteminin kodu:
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);
})
}
Cevap #1
Aldığınız hata, metodunuz getListObs<T>(target):Observable<T> için dönüş tipini belirttiğiniz fakat hiçbir şey döndürmediğiniz anlamına gelir. Sadece return this.tokenifyObs().subscribe(... yazmanız TypeScript hatasını kaldıracaktır. Ancak bu, bir Observable değil, bir abonelik döndürecektir. Bu yöntemde abone olmanıza gerek yok, sadece observable'ı döndürün. Tüm kodunuzu görmedim ama sanırım başlamanız gereken yer burası olabilir:
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);
});
}
