RxJS5运算符,可以处理包裹的*和*未包裹的值?
有了承诺,如果你这样做:RxJS5运算符,可以处理包裹的*和*未包裹的值?,rxjs5,angular2-observables,Rxjs5,Angular2 Observables,有了承诺,如果你这样做: Promise.resolve(p).then(function(){ return 5; }) .then(function(val){ return db.find(); // promise }); 我们可以看到promises上的运算符可以处理任何返回值,它只调用返回结果上的Promise.resolve(),并处理它,无论它是否为Promise 然而,对于RxJS5,我发现很难找到一个能做类似事情的操作符
Promise.resolve(p).then(function(){
return 5;
})
.then(function(val){
return db.find(); // promise
});
我们可以看到promises上的运算符可以处理任何返回值,它只调用返回结果上的Promise.resolve(),并处理它,无论它是否为Promise
然而,对于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操作符或操作符模式可以处理任何值并像承诺一样打开它?据我所知,没有一个操作符可以接受任何东西并正常工作。MergeMap/switchMap/concatMap将使用数组/承诺/可观测值作为返回值,并将它们转换为可观测流。但不是常规值。是的,我实际上不认为这有什么大不了的,只是对于某个调用来说,能够处理一个可观察的或普通的值是半方便的;如果你真的想,你可以创建一个操作符来处理这两个问题