2017-04-14 49 views
1

我有一個多步驟的過程 - 一個回調函數和兩個promise-returns函數 - 我想在它周圍構建一個支持被取消的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'將不會被調用。 –

相關問題