[英]How to solve a real time transaction problem in JavaScript?
我遇到两个有关交易的问题,需要用JavaScript解决。
假设某些事务请求将在之后(2秒,5秒,6秒,9秒,12秒,16秒...)发生。 我需要编写一个简单的函数,以确保两个请求之间至少间隔5秒,并且忽略其他请求。 因此,在此示例中,仅接受2秒,9秒和16秒的事务。 我遇到的另一个问题是编写一个仅接受0s,5s,10s,15s ...的请求的函数,无论哪个更接近5s标记而忽略其他标记。 这一次,该函数应在2秒,5秒,9秒和16秒时接受事务,而忽略其他事务。
`
setTimeout(transaction(2), 2000);
setTimeout(transaction(5), 5000);
setTimeout(transaction(6), 6000);
setTimeout(transaction(9), 9000);
setTimeout(transaction(12), 12000);
setTimeout(transaction(16), 16000);
//first problem: print 2,9,16
//second problem: print 2,5,9,16
`
我有一个使用setTimeout / setInterval / Closure解决这两个问题的想法,但是我不确定如何将它们集成在一起。
使用RxJS的debounceTime
:
https://www.learnrxjs.io/operators/filtering/debouncetime.html
丢弃发射之间的时间少于指定时间的发射值
let transactions$ = getObservableForTransactions();
transactions$
.pipe(
debounceTime( 5000 )
)
.subscribe( txn => console.log( txn ) );
具体来说,对于您的用例,我不知道您的“交易”来自哪里-但是,这是一个使用debounceTime
的更加充实的示例:
// Step 1: Input:
let input = [
{ value: 2, delay: 2000 },
{ value: 5, delay: 5000 },
{ value: 6, delay: 6000 },
{ value: 9, delay: 9000 },
{ value: 12, delay: 12000 },
{ value: 16, delay: 16000 }
];
// Step 2: Set-up an Observable Subject:
let obs$ = new Subject<number>();
// Set-up an initial anonymous subscriber to print all values (without debouncing):
obs$.subscribe( {
next: v => console.log( 'value emitted: %o', v );
} );
// Step 3: Set-up the debounced subscriber:
obs$.pipe( debounceTime( 5000 ) )
.subscribe( { next: v => console.log( 'Debounced value emitted: %o', v ); } );
// Step 4: Spam `setTimeout` to trigger the process:
for( var item in input ) {
setTimeout( () => obs$.next( item.value, item.delay );
}
// Step 5: Open your browser console and view the results in real-time.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.