【问题标题】:Angular RxJS Observable loading errorAngular RxJS Observable 加载错误
【发布时间】:2018-05-26 16:13:08
【问题描述】:

我已经声明了一个可观察变量

workOrders: Observable<IWorkOrders[]>;

然后我以这种方式加载该 observable。

  this.bs.getWorkOrders()
  .pipe(map(data:IWorkOrders[]) => this.workOrders = data)),
    .subscribe((data: IWorkOrders[]) =>
      // this.workOrders = data;
      this.woSubject.next(data),
  );

但是当我这样做时,我会在 this.workOrders = data 行下方看到一个红色的波浪线。而且当我悬停时它说 [ts] 类型 'IWorkOrders[]' 不可分配给类型 'Observable'

【问题讨论】:

    标签: angular typescript rxjs6


    【解决方案1】:

    workOrders=this.bs.getWorkOrders(); 可以工作

    workOrders 的类型为 ObservabledataIWorkOrders[] 类型 由于这些是 2 种不同的类型,因此您会遇到错误。你不能分配IWorkOrders[] to Observable

    【讨论】:

    • @Sumchans 2 种不同的类型 - 因此错误 - iv 已编辑答案。
    • 所以你说如果我这样声明 workOrders:IWorkOrders,我可以从我的组件 this.bs.getWorkOrders().subscribe 中这样调用它。
    • 是的,如果您在组件中确实需要 Obeservable 而不是发出的值,则可以。
    • 好的,谢谢,对 Angular 和 observables 还是新手,完全令人困惑的概念。
    • Observable 有点像普通的老式侦听器模式 + 流
    【解决方案2】:

    如错误消息所述 - workOrders 的类型为 Observable&lt;IWorkOrders[]&gt;,而 data 变量的类型为 IWorkOrders[]。在您的情况下,您试图将两种不兼容的类型相互分配。在map 函数中,您收到Observable 的值,它的类型为IWorkOrders[]

    您需要做的是将workOrders 声明为IWorkOrders[] 而不是该类型的Observable

    workOrders: IWorkOrders[];
    

    附:你有一个额外的尾随逗号.pipe(map(data:IWorkOrders[]) =&gt; this.workOrders = data)), &lt;--

    【讨论】:

    • 我试过它是这样工作的,那么如果它不是可观察的,我如何从另一个组件订阅 workOrders 变量。
    • 有许多不同的方法可以将数据传递给其他组件,具体取决于您想要实现的目标。
    • 我是否必须是可观察的才能订阅其他组件
    • 请解释你想要做什么,因为只看 3 行没有上下文的代码并不清楚。
    猜你喜欢
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 2021-11-02
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多