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);
    });
  }

Relaterte artikler