所以我有一个服务,它使用字典来存储HTTP响应(将IDMap到特定的URL)。
import { HttpClient} from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable, of } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class urlService {
private map: Map<string, string>;
constructor(private http: HttpClient) {
this.map = new Map<string, string>();
}
public getUrl(id: string): Observable<string> {
if (this.map.has(id)) {
return of(this.map.get(id));
}
this.http.get<any>(`...sampleURL...`)
.subscribe((result) => {
this.map.set(id, result.url);
return of(this.map.get(id));
});
}
}
但是,当我尝试从应用组件获取此url
时,记录的值为undefined
。
this.urlService.getUrl(this.id).subscribe(
url => console.log(url)
);
我想这是因为在urlService.getUrl()
中我有一个返回Observable
的订阅。有人能告诉我解决这个问题的正确方向吗?
我尝试使用switchMap
,但似乎没有帮助。
this.http.get<any>(`...sampleUrl...}`).pipe(
switchMap(result => {
this.map.set(id, result.url);
return of(this.map.get(id));
}))
.subscribe();
1条答案
按热度按时间eimct9ow1#
当前
getUrl
方法返回的Observable
不正确。它没有任何返回值,因此返回undefined
。相反,您应该使用
map
rxjs运算符返回Observable
。Demo @ StackBlitz