2017-01-09 71 views
0

有了承諾,如果你這樣做:RxJS5可以處理包裝*和*解包值的運算符?

Promise.resolve(p).then(function(){ 
     return 5; 
    }) 
    .then(function(val){ 
     return db.find(); // promise 
    }); 

我們可以看到,然後承諾運營商可以處理任何返回的值,它只是對返回的結果調用Promise.resolve(),並處理它是否是一個承諾或不。

但是,使用RxJS5時,我發現很難找到可以做類似操作的操作符。我得到了很多的錯誤:

TypeError: You provided x where a stream was expected. You can provide an Observable, Promise, Array, or Iterable. 
    at Object.subscribeToResult (/home/oleg/WebstormProjects/oresoftware/observable-persistent-queue/node_modules/rxjs/util/subscribeToResult.js:73:27) 
    at MergeAllSubscriber._next (/home/oleg/WebstormProjects/oresoftware/observable-persistent-queue/node_modules/rxjs/operator/mergeAll.js:85:42 

例如,本:

Rx.Observable.range(1,9) 
    .flatMap(function(){ 
     return Rx.Observable.timer(4) 
    }) 
    .concatAll() // this will throw the error 
    .subscribe(); 

是有可以處理任何價值,解開它像承諾運營商的運營商RxJS或模式?

回答

1

據我所知,沒有運營商需要任何東西,只是作品。 MergeMap/switchMap/concatMap將與array/promises/observables一起作爲返回值並將它們轉換爲Observable流。但不符合常規值。

+0

是的我其實並不認爲這是一筆交易,只是爲了能夠處理Observable或普通價值的某個呼叫而半方便;如果你真的想要,你可以創建一個既能處理我也能處理的操作符 – Olegzandr