错误:类型'Subscription'缺少以下属性 输入'Observable>':_isScalar,来源,运算符,提升, 还有6个。ts(2740)
我在这里附加了我的代码。
在我的情况下,我有两个方法返回可观察到的值,但有getByTypeData和getByType。但是,从getByTypeData()返回this.getByType(type)..时,我遇到了以上错误。
P.S .:我想在组件中订阅getByTypeData,这应该使我可以观察到。而且我是RXJS的新手...
/*
interface IStringMap<T> {
[index: string]: T;
}
*/
getByTypeData(type: string, ignoreApi = false): Observable<stringMap<any>> {
if (ignoreApi) {
this.handleConfig(type);
}
return this.getByType(type)
.subscribe(response => {
const config = response.result ? response.data : {};
return this.handleConfig(type, config);
});
}
// This method in another file (Just for reference)
getByType(type: string): Observable<stringMap<any>> {
return this.httpClient.get(`get url`);
}
handleConfig(type: string, config: stringMap<string | number> = {}): Observable<stringMap<any>> {
if (type === this.types) {
config.token = this.anotherservice.GetKey('mykey');
if (config.token) {
// logic
}
}
if (type === this.types) {
// logic
}
return of(config);
}
答案 0 :(得分:1)
如注释中所指出,您将返回Subscription
而不是返回Observable
。我建议您阅读documentation以便更好地了解它们之间的区别。
在您的特定情况下,建议您改用以下方法:
getByTypeData(type: string, ignoreApi = false): Observable<stringMap<any>> {
if (ignoreApi) {
return this.handleConfig(type);
}
return this.getByType(type).pipe(
switchMap(response => {
const config = response.result ? response.data : {};
return this.handleConfig(type, config);
})
);
}
switchMap
是一个rxjs运算符,需要使用以下语句导入:
import { switchMap } from 'rxjs/operators'