2016-11-09 178 views
0

在Rxjs,我知道訂閱方法有三個三種類型值的可觀察到的執行:接下來,錯誤,complete.It的易寫在認購()方法的箭頭的功能,但我見過面的認購({})方法。所以我不知道是什麼means.for例如:在這個例子中observable.subscribe()和observable.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); 
    } 
+0

提供完整的表達。 – zerkms

+0

我已經更新的問題,不知是否清楚了,謝謝你的建議 – zfireear

回答

1

有兩種方法可以調用.subscribe()

  • 在觀察者傳遞作爲單個參數
  • 在1-3回調傳遞用於onNext,onError的,的onComplete

你似乎是熟悉的是後者的方法。在其核心,觀察者只是用.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); 
+3

您所提供的鏈接是RxJS V4及以下。從第5版起,Angular 2使用的是[Observers](https://github.com/ReactiveX/rxjs/blob/master/doc/observer.md)上的文檔可以在[new v5 for v5](https ://github.com/ReactiveX/rxjs)。 – GregL

+1

@GregL是的,你指出key.and有大約Rxjs V5任何豐富的教程? – zfireear

0

這不是具體到subscribe(),這對每個方法或函數調用相同。這是關於按位置或按名稱傳遞參數的。當傳遞對象文字時,傳遞的值將使用對象屬性名稱分配給方法參數。 {}只是一個空對象(無參數)。