Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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
Javascript RxJS承诺链接_Javascript_Promise_Reactive Programming_Rxjs - Fatal编程技术网

Javascript RxJS承诺链接

Javascript RxJS承诺链接,javascript,promise,reactive-programming,rxjs,Javascript,Promise,Reactive Programming,Rxjs,我是RxJS的新手。因此,我有一个为不同的ajax调用创建有效负载的流,然后我使用flatMap检索我需要的数据,它工作正常。简单 const streamA = Rx.Observable.from(array); const streamB = streamA .map( val => /* build payload */ ) .flatMap( payload => Rx.Observable.fromPromise($.ajax(payload)) stream

我是RxJS的新手。因此,我有一个为不同的ajax调用创建有效负载的流,然后我使用flatMap检索我需要的数据,它工作正常。简单

const streamA = Rx.Observable.from(array);

const streamB = streamA
  .map( val => /* build payload */ )
  .flatMap( payload => Rx.Observable.fromPromise($.ajax(payload))

streamB.subscribe( result => /* got it */)
现在,我将为每个项目创建一个有效负载数组,但问题是,现在当我订阅流时,我将返回每个请求,但在完成时,我将只返回初始元素

const streamC = streamA
  .flatMap( payloads => {
    return Rx.Observable.from(payloads)
      .flatMap( payload => Rx.Observable.fromPromise($.ajax(payload))

streamC.subscribe( result => /* executed for every payload */)
我尝试了
groupBy
,它返回正确的分组数组,并向我展示了我可以链接Observable,但我仍然无法确定如何正确地订阅观测者以实现元素

const streamWLF = streamA
  .flatMap( payloads => {
    return Rx.Observable.from(payloads)
      .flatMap( payload => Rx.Observable.fromPromise($.ajax(payload))
      .groupBy((obs) => obs.key, (obs) => obs)

streamWLF.subscribe( result => {
  result.subscribe(/* did my magic here*/);
})
所以我的问题是,哪种方法最好

收到子流项目时,是否总是触发订阅的主流


而且,如果可能的话,我如何订阅子流以触发仅在子流完成时订阅的主流?

我想您正在寻找操作员

const streamC = streamA
  .flatMap(payloads => Rx.Observable.forkJoin(payloads));

streamC.subscribe( results => /*An array containing the results from all payloads*/);

我想你在找接线员

const streamC = streamA
  .flatMap(payloads => Rx.Observable.forkJoin(payloads));

streamC.subscribe( results => /*An array containing the results from all payloads*/);

也许你应该用concatMap而不是flatMap。我不清楚你的问题。你说的“完成时只返回初始元素”是什么意思?Promissions只返回一个项目,您是否试图以某种方式将每组有效负载的结果关联在一起?@paulpdaniels是的,我有包含一系列有效负载的项目,我希望返回,而不是流中的所有有效负载,但是里面有返回的有效载荷的元素。也许你应该使用concatMap而不是flatMap。我不清楚你的问题。你说的“完成时只返回初始元素”是什么意思?Promissions只返回一个项目,您是否试图以某种方式将每组有效负载的结果关联在一起?@paulpdaniels是的,我有包含一个有效负载数组的项目,我希望返回的不是流中的所有有效负载,而是包含返回有效负载的元素。