Angular 2,使用带有管道的可观察对象并返回结果

时间:2019-04-18 16:33:34

标签: angular observable angular-pipe

我正在将ID传递给进行api调用并返回可观察值的管道。我需要返回按管道要求过滤的数据:

create-drop

我知道以上内容是错误的,但这是我目前所拥有的。

1 个答案:

答案 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的文档中(最常用)。