2016-08-09 32 views
0

當我嘗試從此rxjs觀察者中取消訂閱時,出現「Illegal Invocation」錯誤。Rxjs/AngularFire2:unsubscribe():「TypeError:Illegal Invocation」

let s = names.subscribe((a:Array<any>) => { 
    s.unsubscribe(); 
    if(a.length){ reject('name exists') } 
} 

變量的類型FirebaseListObservable

設置一些斷點,我可以看到,觀察者函數(回調)被立即調用。此訂閱之後的任何代碼在回調已經運行一次之後運行。變量未定義,因此在回調中。

我在這裏做錯了什麼?觀察者不應該等到下一次打勾?我應該手動嗎?

UPDATE:包裝回調代碼中的setTimeout(代碼,0)擺脫了錯誤的。這似乎很奇怪,我應該不得不這樣做呢?

回答

1

next塊得到執行完全取決於實現。有一個回調的一點是,當事件到達時,您的代碼不應該關注,只有發生時應該發生。

如果從流只需要第一個項目,那麼你可以使用任何take(1)first()代替:

let s = names.first().subscribe((a:Array<any>) => { 
    if(a.length){ reject('name exists') } 
} 
+0

漂亮,謝謝 –

相關問題