Я изучал rxjs и угловые уроки, пытаясь понять Observables и как связать их вместе.Исходя из всего, что я прочитал, приведенный ниже код должен работать.Но это не так, и я не понимаю, почему.
Я пытаюсь получить токен из хранилища (подделал эту часть с помощью метода getFakeToken, потому что он хорошо компилируется), затем заполняю этот токен вОбъект httpHeaders, который должен быть обернут в наблюдаемую информацию, которую я затем могу соединить вместе с другим вызовом веб-службы и вернуть эту наблюдаемую в конце дня (именно поэтому я не использую подписку).Я вынул последний вызов веб-службы (который использовал бы опции http, встроенные в метод buildHttpOptions), потому что ошибка в строке buildHttpOptions.
Я не уверен, что объясняювсе правильно, поэтому вот еще один способ выразить это: я пытаюсь асинхронно получить токен, вставить этот токен в объект httpOptions, а затем (в будущей итерации кода, который будет другим ".pipe ()" вконец оператора return), используйте его для асинхронного вызова веб-службы и возврата результата, обернутого в наблюдаемую.Первые две части (получение токена и вставка его в объект) дают сбой, и я включил их в приведенный ниже код.
Я получаю сообщение об ошибке:
[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$);
}