类型 '(token: string) => Observable<{ headers: HttpHe aders; }>' 不能分配给类型 'Observable<an



我一直在浏览RXJ和Angular教程,试图理解可观察到的物品以及如何将它们链接在一起。根据我阅读的所有内容,以下代码应起作用。但这不是,我不明白为什么。

我正在尝试从存储中获得一个令牌(用getfaketken方法伪造了那部分,因为这会汇总良好),然后在httpheaders对象中刻有disken的东西,该对象应该包裹在可观察的,然后我可以与我一起链条连锁另一个呼叫Web服务并在一天结束时返回可观察到的(这就是为什么我不使用订阅的原因)。我已经对Web服务进行了最后一次调用(这将使用buildhttpoptions方法中构建的HTTP选项),因为错误已在buildhttpoptions Line上。

我不确定我要正确解释所有内容,所以这是提出它的另一种方法:我正在尝试获得一个令牌,将令牌插入httpoptions对象,然后(将来代码的迭代在返回语句结束时,这将是另一个" .pipe()"),使用它来调用Web服务并返回包裹在可观察的结果中。前两个部分(获取令牌并将其插入对象)失败了,我将它们包括在下面的代码中。

错误消息我得到:

[ng] ERROR in src/app/web-api/api.service.ts(57,50): error TS2322: Type '(token: string) => Observable<{ headers: HttpHe
aders; }>' is not assignable to type 'Observable<any>'.
[ng]   Property '_isScalar' is missing in type '(token: string) => Observable<{ headers: HttpHeaders; }>'.
[ng] src/app/web-api/api.service.ts(67,31): error TS2345: Argument of type 'Observable<any>' is not assignable to parame
ter of type 'OperatorFunction<string, any>'.
[ng]   Type 'Observable<any>' provides no match for the signature '(source: Observable<string>): Observable<any>'.

代码:

private getFakeToken(): Observable<string> {
    return of("123abc");
}
getGetData(): Observable<any> {
    let getToken$ = this.getFakeToken();
    let buildHttpOptions$: Observable<any> = (token: string) => { return of(
        {
            headers: new HttpHeaders({
                'Content-Type': 'application/json',
                'authorization': token
            })
        })};
    return getToken$.pipe(buildHttpOptions$);
}

您可以使用map操作员将可观察到的对象转换为其他对象。然后使用switchMap链接您的HTTP请求。

getGetData(): Observable<any> {
  return this.getFakeToken().pipe(
    map(token => ({
      headers: new HttpHeaders({
        'Content-Type': 'application/json',
        'authorization': token
      })
    })),
    switchMap(headers => /* your http request that returns an Observable */)
  );
}

最新更新