Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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_Node.js_Rxjs - Fatal编程技术网

Javascript 在RxJS中处理事件;“一次一个”;

Javascript 在RxJS中处理事件;“一次一个”;,javascript,node.js,rxjs,Javascript,Node.js,Rxjs,我正在使用RxJS来处理事件流。可以调度相当多的事件,并且最终处理代码“相对昂贵”,例如加载文件、做一些工作、将一些内容保存到数据库 const rx=require(“rxjs”) //模拟许多事件 可观测常数=接收间隔(1) //订阅活动 常量订阅=可观察 .订阅(x=>{ //在这里做昂贵的事情 }); 我希望subscribe中的代码“一次一个”(或者将来可能是“一次N个”),以便事件处理程序代码在下一个事件开始处理之前完全完成。现在似乎发生的事情是,subscribe中的代码会为每个

我正在使用RxJS来处理事件流。可以调度相当多的事件,并且最终处理代码“相对昂贵”,例如加载文件、做一些工作、将一些内容保存到数据库

const rx=require(“rxjs”)
//模拟许多事件
可观测常数=接收间隔(1)
//订阅活动
常量订阅=可观察
.订阅(x=>{
//在这里做昂贵的事情
});
我希望
subscribe
中的代码“一次一个”(或者将来可能是“一次N个”),以便事件处理程序代码在下一个事件开始处理之前完全完成。现在似乎发生的事情是,subscribe中的代码会为每个事件一次又一次地被调用,因此有许多事件同时被处理

我尝试了两种不同的方法(主要是在
管道内部进行试验)
rx.operators.throttle
丢弃事件,这不是我想要的-我只想保留它们。使用带有异步函数的
flatMap
,只会延迟正在处理的流的开始

const\u worker=x=>{
返回新的可观察接收(订户=>{
设置超时(()=>{
订户。下一个(x*5)
订阅服务器。完成()
}, 5 * 1000);
})
}
常量订阅=可观察
.烟斗(
rxops.flatMap(_-worker)
)
.订阅(x=>{
});

所以我现在被困在这里了。这是可能的,还是我只是想以某种方式使用RxJS,而不是预期的方式?

您想要
concatMap
()

concatMap
将源可观测值映射到某个内部可观测值,在内部可观测值完成之前,它不会移动到源的下一个值

const source = rx.interval(1);

source.pipe(
    concatMap(val => {
        // Do expensive (async) work here and return an Observable.
        // Next value from source won't be processed until this inner Observable
        // completes (and no values from source will be skipped). 
    })
).subscribe()

非常感谢。确认全部要点如下: