forked from jchomaz/Vulture
54 lines
957 B
JavaScript
54 lines
957 B
JavaScript
/**
|
|
* @file async-stream.js
|
|
*/
|
|
import Stream from '@videojs/vhs-utils/es/stream.js';
|
|
|
|
/**
|
|
* A wrapper around the Stream class to use setTimeout
|
|
* and run stream "jobs" Asynchronously
|
|
*
|
|
* @class AsyncStream
|
|
* @extends Stream
|
|
*/
|
|
export default class AsyncStream extends Stream {
|
|
constructor() {
|
|
super(Stream);
|
|
this.jobs = [];
|
|
this.delay = 1;
|
|
this.timeout_ = null;
|
|
}
|
|
|
|
/**
|
|
* process an async job
|
|
*
|
|
* @private
|
|
*/
|
|
processJob_() {
|
|
this.jobs.shift()();
|
|
if (this.jobs.length) {
|
|
this.timeout_ = setTimeout(
|
|
this.processJob_.bind(this),
|
|
this.delay
|
|
);
|
|
} else {
|
|
this.timeout_ = null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* push a job into the stream
|
|
*
|
|
* @param {Function} job the job to push into the stream
|
|
*/
|
|
push(job) {
|
|
this.jobs.push(job);
|
|
if (!this.timeout_) {
|
|
this.timeout_ = setTimeout(
|
|
this.processJob_.bind(this),
|
|
this.delay
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|