当前位置: 首页 > Web前端 > JavaScript

SAP电商云ActiveCartService的isStableAPI中的debounce和timer算子

时间:2023-03-27 01:52:11 JavaScript

这个isStableAPI的实现是switchMap和debounce,[timer](https://www.learnrxjs.io/learn-rxjs/operators/创建/定时器)和其他运营商。首先看定时器示例://RxJSv6+import{timer}from'rxjs';//1秒后发出0然后完成,因为没有提供第二个参数//定时器调用返回一个Observable,它被订阅1秒在一分钟后发出一个整数0,constsource=timer(1000);//output:0constsubscribe=source.subscribe(val=>console.log(val));从控制台输出来看,确实是订阅后一秒,launchInteger0:timer的第二个参数是时间间隔,如下例子://RxJSv6+import{timer}from'rxjs';/*timer有第二个参数,在这种情况下,我们将在1秒后发出第一个值,之后每2秒发出一次后续值*/constsource=timer(1000,2000);//输出:0,1,2,3,4,5...constsubscribe=source.subscribe(val=>console.log(val));从输出可以看出,整数0在1秒后发出,然后每两秒发出一个递增的整数:参见debounce:Discardemittedvaluesthattakelessthanthespecifiedtime,basedonselectorfunction,between输出。如果数据在选择器函数指定的时间间隔内发出,它将被丢弃。debounce还返回一个新的Observable,它接受一个函数作为输入。debounce(durationSelector:function):Observable下面的代码只会看到打印在控制台上的of参数中的最后一个元素://RxJSv6+import{of,timer}from'rxjs';import{debounce}from'rxjs/operators';//emit四个字符串constexample=of('WAIT','ONE','SECOND','Lastwilldisplay');/*仅在最后一次发射之间经过一秒后才发射值,throwawayallothervalues*/constdebouncedExample=example.pipe(debounce(()=>timer(1000)));/*在这个例子中,除了最后一个之外的所有值都会被省略输出:'Lastwilldisplay'*/constsubscribe=debouncedExample.subscribe(val=>console.log(val));以下代码://RxJSv6+import{interval,timer}from'rxjs';从'rxjs/operators'导入{debounce};//每1秒发出一次值,例如。0...1...2constinterval$=interval(1000);//将去抖时间每秒增加200msconstdebouncedInterval=interval$.pipe(debounce(val=>timer(val*200)));/*5秒后,去抖时间将大于间隔time,所有未来的值都会被丢弃输出:0...1...2...3...4...(debouncetimeover1s,novaluesemitted)*/constsubscribe=debouncedInterval.subscribe(val=>console.log(`例二:${val}`));输出:首先是第6行的interval(1000),订阅后,每1秒会产生一个递增的整数值。在第8行通过管道传输到debounce运算符的整数值。如果在debounce输入参数值表示的时间间隔内发出数据,则数据将被丢弃,这就是debounce运算符所做的。每1秒产生的整数进入debounce算子,debounce监控的时间间隔由函数(val)=>timer(val*200)指定,所以debounce监控的时间间隔为200,400,600,800,1000毫秒,依此类推。1200毫秒后interval每1秒生成一次值,因为1秒的时间间隔已经落在了从1200毫秒开始的debounce的时间间隔内,所以从5开始的整数都会被debounce算子全部丢弃。