Last active
November 17, 2015 23:21
-
-
Save bouzuya/cc724434cf0cb2803b7b to your computer and use it in GitHub Desktop.
Observable のチェーンを簡素化
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # No Scheduler | |
| # No Observer (onError & onCompleted) | |
| # No Disposable | |
| class Observable | |
| @from: (array) -> | |
| new FromObservable(array) | |
| filter: (predicate) -> | |
| new FilterObservable(@, predicate) | |
| map: (selector) -> | |
| new MapObservable(@, selector) | |
| subscribe: (onNext) -> | |
| throw new Error('Not implemented') | |
| class FromObservable extends Observable | |
| constructor: (@array) -> | |
| subscribe: (onNext) -> | |
| @array.forEach onNext | |
| class FilterObservable extends Observable | |
| constructor: (@source, @predicate) -> | |
| subscribe: (onNext) -> | |
| @source.subscribe (x) => | |
| onNext(x) if @predicate(x) | |
| class MapObservable extends Observable | |
| constructor: (@source, @selector) -> | |
| subscribe: (onNext) -> | |
| @source.subscribe (x) => | |
| onNext @selector(x) | |
| Observable | |
| .from([1..10]) | |
| .filter (x) -> x % 2 is 0 | |
| .map (x) -> x * x | |
| .subscribe (x) -> | |
| console.log x |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # No Scheduler | |
| # No onError & onCompleted | |
| # No Disposable | |
| class Observable | |
| @from: (array) -> | |
| new FromObservable(array) | |
| filter: (predicate) -> | |
| new FilterObservable(@, predicate) | |
| map: (selector) -> | |
| new MapObservable(@, selector) | |
| subscribe: (observer) -> | |
| throw new Error('Not implemented') | |
| class Observer | |
| constructor: (@_onNext) -> | |
| onNext: -> | |
| @_onNext.apply(@, arguments) | |
| class FromObservable extends Observable | |
| constructor: (@array) -> | |
| subscribe: (observer) -> | |
| @array.forEach observer.onNext.bind(observer) | |
| class FilterObservable extends Observable | |
| class FilterObserver | |
| constructor: (@observer, @predicate) -> | |
| onNext: (x) -> | |
| @observer.onNext(x) if @predicate(x) | |
| constructor: (@source, @predicate) -> | |
| subscribe: (observer) -> | |
| @source.subscribe new FilterObserver(observer, @predicate) | |
| class MapObservable extends Observable | |
| class MapObserver extends Observer | |
| constructor: (@observer, @selector) -> | |
| onNext: (x) -> | |
| @observer.onNext @selector(x) | |
| constructor: (@source, @selector) -> | |
| subscribe: (observer) -> | |
| @source.subscribe new MapObserver(observer, @selector) | |
| Observable | |
| .from([1..10]) | |
| .filter (x) -> x % 2 is 0 | |
| .map (x) -> x * x | |
| .subscribe new Observer (x) -> | |
| console.log x |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
よりチェーンっぽさを伝えるために filter を追加したり、range は引数がわかりづらいので from (本来は iterable をとるが今回は array のみ) にしたり。