你想从中返回一个可观察的吗?
如果是,则会出现错误,因为当您返回 userData 时,您并没有返回 observable,而是返回值。如果您希望返回 observable,请不要订阅它,而是使用.pipe(map( your res => transform logic...)),这样,您将转换 observable 结果并在 observable 中返回映射结果。当你订阅时,你消耗了 observable,因此错误。
例如:
...
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 的值,它是一个值(对象、文本等)。问题是,由于它是异步的,因此该方法实际上返回未定义的同步调用,因此您必须注意这一点。
管道允许你在 Observables 中操作结果,这样你就可以从调用中得到你想要得到的东西。一定要阅读它们,最常见的是map, tap, filter,还有一些我不记得了,尽管它们在 Angular 的文档中(最常用的)。