2017-04-14 10 views
1

私はコールバックを取る関数と2つの約束を返す関数という多段階のプロセスを持っていますが、取り消しをサポートするObservableを構築したいと思います。私が持っているものは:これはキャンセル可能なObservableの妥当な実装ですか?

let observableFromEvent = evt => Observable.create(({ next, error, complete }) => { 
    let canceled 
    Promisify(callbackFn)(evt) 
     .then(r => !canceled && promiseF1(r)) 
     .then(r => !canceled && promiseF2(r)) 
     .then(next) 
     .then(complete, error) 
    return() => { 
     canceled = true 
    } 
}) 

私は何かを残しているか誰に教えてもらえますか?またはあまりにも多くを残した? 私の意図した使用方法は次のとおりです。

event$.switchMap(observableFromEvent) 

それらが生み出されたときに、以前のキャンセル観測のシリーズを作成します。

あなたは、次のような単純なように、組み込みの演算子でそれを行うことができます

答えて

3

observableFromEvent = evt => Observable 
    .bindCallback(callbackFn)(evt) 
    .flatMap(promiseF1) 
    .flatMap(promiseF2) 
+0

それは本質的に解約だgreat-ですか?私はすぐにしよう! –

+0

このキャンセル可能性は本質的にキャンセル可能にする理由は何ですか? –

+1

はい、それは本質的にキャンセル可能です - それはrxjsの美しさです。各オペレータは、自分自身で取り消し可能な新しいオブザーバブルを作成し、そのオブザーバからの退会時に下位のオブザーバブルからの退会を行います。たとえば、 'promiseF1'が値を送出する前に、あなたがそれから退会すると、' promiseF2'は呼び出されません。 –

関連する問題