57. Observableを作る
シェアしよう
少し工夫が必要 - accepted / - tried
RxJSはご存知ですか? その中で一番重要なコンセプトはObservable と Observerです。
Observableでは、valuesをObserverに渡すロジックを決める。Observerはcallbackの集合である。
コードを見るとわかりやすい。
const observer = { next: (value) => { console.log('we got a value', value) }, error: (error) => { console.log('we got an error', error) }, complete: () => { console.log('ok, no more values') }}
上記は一つのObserverで、三つのcallbackにすぎない。
このObserverにObservableをサプスクライブさせよう。Observableは値(value)またはerrorを送ってくる。
const observable = new Observable((subscriber)=> { subscriber.next(1) subscriber.next(2) setTimeout(() => { subscriber.next(3) subscriber.next(4) subscriber.complete() }, 100)})
上のコードはつまり、新規subscribingの場合は:
- 值
1
を渡す - 值
2
を渡す - 100 msを待つ
- 值
3
を渡す - 值
4
を渡す - 値はもうない、終わる。
上記のobservable
に前のobserver
がsubscribeすると、next()
と complete()
は順序通りに呼ばれる。
const sub = observable.subscribe(subscriber)// we got a value 1// we got a value 2// we got a value 3// we got a value 4// ok, no more values
subscribe()
の戻り値はSubscription、メソッドのunsubscribe()
を使えば取り消しが可能に。
const sub = observable.subscribe(subscriber)setTimeout(() => { // ok we only subscribe for 100ms sub.unsubscribe()}, 100)
以上はObservable と Observerの基本です。いかがでしょうか?
ではここからはObservableを実装してください!
上記以外満たす必要な条件はこちら
error
とcomplete
の発火は一回のみ、その後のnext/error/complete
はスキップ。- subscribe()に置いて、
next/error/complete
は全部optionalであるべき。もし関数が渡されたら、next
と扱うべき。 - multiple subscriptionはサポートする
もっと読む