Angular2:为什么Subscriber对象上不允许订阅?

时间:2016-05-27 08:40:25

标签: angular

如果我有一个可观察的对象o:

let o: Observable<Object> = ...

我可以订阅这个对象,但为什么不允许订阅Subscriber对象。举一个现实世界的例子:

  myServiceCall() {
    let o: Observable<Object> = ...
    return o.subscribe(...)
   }

   ngOnInit() {
     this.myServiceCall().subscribe(...) // Not allowed on a Subscriber object
   }

有了承诺,那就像是连续使用几个。我不明白为什么不允许这样做。

2 个答案:

答案 0 :(得分:0)

问题是myServiceCall方法返回一个子描述而不是一个可观察的。而且您无法订阅订阅。此对象提供了一个unsubscribe方法来取消针对observable的订阅。

选项可以是do运算符:

myServiceCall() {
  let o: Observable<Object> = ...
  return o.do((data) => { // <----
    // do something with the received data without subscribing
  });
 }

 ngOnInit() {
   this.myServiceCall().subscribe(...) // Not allowed on a Subscriber object
 }

答案 1 :(得分:0)

subscribe()会返回Subscription而不是Observable。您无法订阅Subscription

改为使用

  myServiceCall() {
    let o: Observable<Object> = ...
    return o.map(...)
   }

   ngOnInit() {
     this.myServiceCall().subscribe(...) // Not allowed on a Subscriber object
   }