fix(core): update
This commit is contained in:
parent
6208cab36a
commit
7aa0f05bae
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"workbench.colorCustomizations": {}
|
||||
}
|
25
test/test.timedaggregator.ts
Normal file
25
test/test.timedaggregator.ts
Normal file
@ -0,0 +1,25 @@
|
||||
// import test framework
|
||||
import { expect, tap } from '@pushrocks/tapbundle';
|
||||
import * as events from 'events';
|
||||
import * as smartpromise from '@pushrocks/smartpromise';
|
||||
|
||||
// import the module
|
||||
import * as lik from '../ts/index';
|
||||
|
||||
let testTimedAggregator: lik.TimedAggregtor<string>;
|
||||
|
||||
tap.test('should create a timed aggregaotor', async (tools) => {
|
||||
testTimedAggregator = new lik.TimedAggregtor<string>({
|
||||
aggregationIntervalInMillis: 1000,
|
||||
functionForAggregation: (aggregation) => {
|
||||
console.log(aggregation);
|
||||
}
|
||||
});
|
||||
testTimedAggregator.add('This');
|
||||
testTimedAggregator.add('is a whole sentence.');
|
||||
await tools.delayFor(1001);
|
||||
testTimedAggregator.add('This one is another.');
|
||||
await tools.delayFor(2000);
|
||||
});
|
||||
|
||||
tap.start();
|
@ -7,4 +7,5 @@ export * from './lik.limitedarray';
|
||||
export * from './lik.looptracker';
|
||||
export * from './lik.objectmap';
|
||||
export * from './lik.stringmap';
|
||||
export * from './lik.timedaggregator';
|
||||
export * from './lik.tree';
|
||||
|
@ -19,7 +19,7 @@ export { smartdelay, smartpromise, smartrx, smarttime };
|
||||
// ==============
|
||||
// third party
|
||||
// ==============
|
||||
import * as minimatch from 'minimatch';
|
||||
import minimatch from 'minimatch';
|
||||
const symbolTree = require('symbol-tree');
|
||||
|
||||
export { minimatch, symbolTree };
|
||||
|
42
ts/lik.timedaggregator.ts
Normal file
42
ts/lik.timedaggregator.ts
Normal file
@ -0,0 +1,42 @@
|
||||
import * as plugins from './lik.plugins';
|
||||
|
||||
export interface ITimedAggregatorOptions<T> {
|
||||
aggregationIntervalInMillis: number;
|
||||
functionForAggregation: (input: T[]) => void;
|
||||
}
|
||||
|
||||
export class TimedAggregtor<T> {
|
||||
public options: ITimedAggregatorOptions<T>;
|
||||
private storageArray: T[] = [];
|
||||
|
||||
constructor(optionsArg: ITimedAggregatorOptions<T>) {
|
||||
this.options = optionsArg;
|
||||
|
||||
}
|
||||
|
||||
private aggregationTimer: plugins.smarttime.Timer;
|
||||
private checkAggregationStatus () {
|
||||
const addAggregationTimer = () => {
|
||||
this.aggregationTimer = new plugins.smarttime.Timer(this.options.aggregationIntervalInMillis);
|
||||
this.aggregationTimer.completed.then(() => {
|
||||
const aggregateForProcessing = this.storageArray;
|
||||
if (aggregateForProcessing.length === 0) {
|
||||
this.aggregationTimer = null;
|
||||
return;
|
||||
}
|
||||
this.storageArray = [];
|
||||
addAggregationTimer();
|
||||
this.options.functionForAggregation(aggregateForProcessing);
|
||||
});
|
||||
this.aggregationTimer.start();
|
||||
};
|
||||
if (!this.aggregationTimer) {
|
||||
addAggregationTimer();
|
||||
}
|
||||
}
|
||||
|
||||
public add(aggregationArg: T) {
|
||||
this.storageArray.push(aggregationArg);
|
||||
this.checkAggregationStatus();
|
||||
}
|
||||
};
|
Loading…
Reference in New Issue
Block a user