【问题标题】:what is the difference between observable.subscribe() and observable.subscribe({ })?observable.subscribe() 和 observable.subscribe({ }) 有什么区别?
【发布时间】:2016-11-09 13:55:56
【问题描述】:

在Rxjs中,我知道subscribe方法有一个Observable Execution的三种类型的值:next,error,complete。在subscribe()方法中写箭头函数很容易,但是我遇到了subscribe({})方法某处。所以我不知道它是什么意思。例如:

var observable = Rx.Observable.create(function (observer) {
  observer.next(1);
  observer.next(2);
  observer.next(3);
  setTimeout(() => {
    observer.next(4);
    observer.complete();
  }, 1000);
});

console.log('just before subscribe');
observable.subscribe({
  next: x => console.log('got value ' + x),
  error: err => console.error('something wrong occurred: ' + err),
  complete: () => console.log('done'),
});
console.log('just after subscribe');

在本例中,它使用 observable.subscribe({}),以及不同的表达式示例,如下所示:

getHeroes() {
    this.heroService.getHeroes()
                     .subscribe(
                       heroes => this.heroes = heroes,
                       error =>  this.errorMessage = <any>error);
  }

【问题讨论】:

  • 提供完整的表达式。
  • 我已经更新了问题,不知道是否清楚,谢谢您的建议

标签: angular rxjs


【解决方案1】:

您可以通过两种方式拨打.subscribe()

  • 将观察者作为单个参数传入
  • 为 onNext、onError、onComplete 传入 1-3 个回调

您似乎熟悉的方法是后者。从本质上讲,观察者只是一个具有.next().error().complete() 方法的对象,在内部,这些是可观察对象在每个事件上调用的方法。

您的第一个代码示例确实使用这三种方法传入了一个对象,因此作为观察者可以成功运行,但我看不到任何表明您应该能够使用这样的普通对象的东西作为观察者。如果你想使用观察者,你应该创建一个实际的观察者并将其传入:

var observer = Rx.Observer.create(
  x => console.log('got value ' + x),
  err => console.error('something wrong occurred: ' + err),
  () => console.log('done')
);

observable.subscribe(observer);

【讨论】:

  • 您提供的链接适用于 RxJS v4 及以下版本。从 Angular 2 使用的 v5 开始,Observers 上的文档位于new repo for v5
  • @GregL 是的,你指出了关键。有没有关于 Rxjs v5 的丰富教程?
【解决方案2】:

这并不特定于subscribe(),对于每个方法或函数调用都是一样的。它是关于按位置或按名称传递参数。当传递一个对象字面量时,传递的值使用对象属性名称分配给方法参数。 {} 只是一个空对象(没有参数)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 2019-06-09
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多