Source: components/TaskExecutorComponent.js

import { BaseComponent } from './BaseComponent';

const __ = {
	private: Symbol('private'),
}

/**
 * @class TaskExecutorComponent
 * The task executor component.
 * @memberof THING
 * @extends THING.BaseComponent
 */
class TaskExecutorComponent extends BaseComponent {


	constructor() {
		super();

		this[__.private] = {};
		let _private = this[__.private];

		_private.promises = [];
	}

	add(promise) {
		let _private = this[__.private];

		_private.promises.push(promise);
	}

	clear() {
		let _private = this[__.private];

		_private.promises.length = 0;
	}

	then(callback, error) {
		let _private = this[__.private];

		Promise.all(_private.promises).then(callback, error);
	}

	get promises() {
		let _private = this[__.private];

		return _private.promises;
	}

}

export { TaskExecutorComponent }