我正在将ID传递给进行api调用并返回可观察值的管道。我需要返回按管道要求过滤的数据:
create-drop
我知道以上内容是错误的,但这是我目前所拥有的。
答案 0 :(得分:1)
您是否要从中返回可观察的东西?
如果存在,则会出现错误,因为返回userData时,您返回的不是可观察值,而是值。如果您希望返回可观察的对象,请不要订阅它,而是使用.pipe(map( your res => transform logic...))
,这样,您就可以转换可观察的结果并返回可观察对象内部的映射结果。订阅时,您消耗的是可观察的东西,因此就是错误。
例如:
...
transform(value: string, userProp?: any): any {
return this.userService.getUser(value).pipe(map(res => { // changed the subscribe
let userData; // scoping it inside the return
userData = res;
if (!userProp) {
return userData;
} else {
const prop = userProp === 'displayName' ? `${userData.firstName} ${userData.lastName}` : oneProjectUser(value)[userProp];
return prop;
}
}));
}
...
我认为这是正确的,但尚未对其进行测试。告诉我是否可行
编辑说明
如果您这样做:
return this.service.get()
,它返回一个可观察值,您得到一个Observable<T>
;
return this.service.get().subscribe()
您将返回一个Subscription
接口,这不是您想要的接口(它具有取消订阅的方法,依此类推,但是不是Observable)。
this.service.get(res => { return res })
,您将返回res的值,它是一个值(对象,文本等)。问题是,由于它是异步的,因此teh方法实际上在同步调用中返回undefined,因此您必须意识到这一点。
管道允许您在Observables内部操纵结果,以便从调用中准确获得要获得的结果。一定要阅读它们,最常见的是map, tap, filter
,还有一些我不记得了,尽管它们在Angular的文档中(最常用)。