observable.subscribe()和observable.subscribe({})之间有什么区别?

时间:2016-11-09 02:45:06

标签: angular rxjs

在Rxjs中,我知道subscribe方法有三种类型的值:Observable Execution:next,error,complete.It在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);
  }

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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