RxJS5运算符,可以处理包装的*和*未包装的值?

时间:2017-01-09 20:20:34

标签: rxjs5 angular2-observables

使用Promise,如果你这样做:

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

我们可以看到promises上的运算符可以处理任何返回的值,它只是在返回结果上调用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运算符或运算符模式可以处理任何值并像Promises一样解包它?

1 个答案:

答案 0 :(得分:1)

据我所知,没有任何操作员可以接受任何操作。 MergeMap / switchMap / concatMap将使用array / promises / observables作为返回值并将它们转换为Observable流。但不是常规值。