Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RxJS5运算符,可以处理包裹的*和*未包裹的值?_Rxjs5_Angular2 Observables - Fatal编程技术网

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将使用数组/承诺/可观测值作为返回值,并将它们转换为可观测流。但不是常规值。

是的,我实际上不认为这有什么大不了的,只是对于某个调用来说,能够处理一个可观察的或普通的值是半方便的;如果你真的想,你可以创建一个操作符来处理这两个问题