@openhps/core
Version:
Open Hybrid Positioning System - Core component
58 lines • 1.49 kB
JavaScript
import { DataFrame } from '../../data/DataFrame';
import { Node } from '../../Node';
/**
* @category Flow shape
*/
export class BufferNode extends Node {
constructor(options) {
super(options);
this.on('pull', this.onPull.bind(this));
this.on('push', this.onPush.bind(this));
this.on('build', this._initService.bind(this));
}
_initService() {
return new Promise(resolve => {
if (!this.service) {
this.service = this.model.findDataService(this.options.service || DataFrame);
}
resolve();
});
}
onPull(options) {
return new Promise((resolve, reject) => {
this.shift().then(frame => {
if (frame) {
this.outlets.forEach(outlet => outlet.push(frame, options));
}
resolve();
}).catch(reject);
});
}
onPush(frame) {
return new Promise((resolve, reject) => {
this.service.insertFrame(frame).then(() => {
resolve();
}).catch(reject);
});
}
next() {
return new Promise((resolve, reject) => {
this.service.findOne({}, {
sort: [['createdTimestamp', 1]]
}).then(resolve).catch(reject);
});
}
shift() {
return new Promise((resolve, reject) => {
let result;
this.next().then(frame => {
if (frame) {
result = frame;
return this.service.delete(frame.uid);
} else {
resolve(undefined);
}
}).then(() => resolve(result)).catch(reject);
});
}
}