UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

58 lines 1.49 kB
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); }); } }