我有一个功能:
getCategories(): Observable<any>
{
return this.category.find({where: {clientId: this.userApi.getCurrentId()}})
};
其中this.category.find返回类型为Observable<T[]>
。
我用:
调用getCategories()const source = this.categoryService.getCategories();
const example = source.map(Categ=> Categ.id);
const subscribe = example.subscribe(val => console.log(val));
和Categ.id是未定义
如果我跑:
const source = this.categoryService.getCategories();
const subscribe = source.subscribe(val => console.log(val));
我认为我在某个地方遇到类型问题,但无法弄明白。
有什么想法吗?
谢谢和问候,
答案 0 :(得分:1)
由于getCategories()
返回了一个类别数组,而不仅仅是一个类别,正如您订阅的控制台日志所证明的那样。
您可以尝试以下方式:
const example = source.map((categories) => categories.map((category) => {return category.id}));
答案 1 :(得分:1)
问题确实在于类型。你应该尽可能避免使用“any”,因为那样你就失去了类型验证的优势。
从日志中可以看出source
包含一个数组,但您的source.map(Categ=> Categ.id)
将其视为单个对象。
最好定义Categ
接口,例如:
interface Categ {
id: string;
categoryName: string;
clientId: string;
}
然后将其用于服务方法:
getCategories(): Observable<Categ[]> {
return this.category.find({where: {clientId: this.userApi.getCurrentId()}})
};
以后编译器可以帮助您发现问题并修复代码:
const source = this.categoryService.getCategories();
const example = source.map(categ => categ.map(c => c.id));
const subscribe = example.subscribe(val => console.log(val));
答案 2 :(得分:0)
正在编写一个界面&#34;太多&#34;?
我的.find()方法来自SDK并返回Observable<T[]>
。此外,我正在服务,因为我想从后端获取数据并从组件中调用此服务。我不知道这项服务是否有用,因为只有这个 getCategories()方法。
为了简化,我已经有了一个方法,可以为我提供类别。我刚创建了一个新服务器来设置它。
那么创建一个界面太多了吗?你觉得怎么样?