RxJS withLatestFrom是一種實例方法。一個Observable的實例必須被創建/創建來調用該方法。爲什麼withLatest從RxJS方法不是靜態的?
merge方法是一種靜態方法。沒有必要需要一個實例。
爲什麼RxJS withLatestFrom
不是一種靜態方法,而是一種實例方法?
RxJS withLatestFrom是一種實例方法。一個Observable的實例必須被創建/創建來調用該方法。爲什麼withLatest從RxJS方法不是靜態的?
merge方法是一種靜態方法。沒有必要需要一個實例。
爲什麼RxJS withLatestFrom
不是一種靜態方法,而是一種實例方法?
我認爲一個很好的例子是combineLatest
運算符作爲靜態和實例方法存在。源Observables到combineLatest
的順序無關緊要。它的內部工作方式與輸出相同(只是結果數組中的值的順序將會不同,這是不相關的)。這同樣適用於concat
,merge
,zip
,forkJoin
等等。
但是,與withLatestFrom
算子不同的是,Observables的順序很重要。有一個源Observable控制操作員何時發出。如果您更改了訂單,它會產生不同的結果。例如,如果你有以下:
Observable.withLatestFrom(o1, o2, o3)
這意味着你也可以使用以下命令:
Observable.withLatestFrom(...observables)
現在,你可以不知道哪些可觀察是源,它的將是難以調試這是怎麼回事。
所以沒有Observable.withLatestFrom
靜態方法的原因是因爲它沒有太大意義。 Observables的順序很重要,它會讓事情變得更加混亂。
由於同樣的原因,其他運營商(如buffer
或window
)沒有靜態形式,即使沒有技術限制。它只會讓你編寫更多命令式的代碼,而不是簡單地鏈接操作符。
withLatestFrom
與merge
不同,因爲它有一個規範的「源」可觀察的概念,它由另一個可觀察值的最新值增強。 merge
不是像這樣的「分層」,可觀測量只是等於一個單一的流。