abstract-startable
Abstract Class to represent entities that can be started and stopped
Installation
npm i --save abstract-startable
Usage
Supports both ESM and CommonJS
import AbstractStartable from 'abstract-startable'
const AbstractStartable = require('abstract-startable')
Define a StartableClass and start an instance
import AbstractStartable from 'abstract-startable'
class Car extends AbstractStartable {
protected async _start() {
await this._startEngine()
await this._startHeadlights()
await this._startRadio()
}
protected async _stop() {
await timeout(100)
console.log('stopped')
}
protected async _startEngine() {
await timeout(100)
console.log('vroom')
}
protected async _startHeadlights() {
await timeout(100)
console.log('flash')
}
protected async _startRadio() {
await timeout(100)
console.log('bass')
}
}
const tesla = new Car()
console.log(tesla.started)
await tesla.start()
console.log(tesla.started)
Multiple starts/stops in parallel
const tesla = new Car()
console.log(tesla.started)
tesla.start().catch((err) => {
console.log(tesla.started)
console.error(err)
})
tesla.stop().then(() => {
console.log(tesla.started)
})
tesla.start().catch((err) => {
console.error(err)
})
tesla.stop().then(() => {
console.log(tesla.started)
})
License
MIT