abstract-startable
TypeScript icon, indicating that this package has built-in type declarations

3.0.2 • Public • Published

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

// esm
import AbstractStartable from 'abstract-startable'
// commonjs
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) // log: false
await tesla.start()
// log: vroom
// log: flash
// log: bass
console.log(tesla.started) // log: true

Multiple starts/stops in parallel

const tesla = new Car()
console.log(tesla.started) // log: false
tesla.start().catch((err) => {
  console.log(tesla.started) // log: true
  console.error(err) // log: Error: server started successfully, but is stopping now
})
tesla.stop().then(() => {
  console.log(tesla.started) // log: false
})
tesla.start().catch((err) => {
  console.error(err) // log: Error: cannot start server, server is stopping
})
tesla.stop().then(() => {
  console.log(tesla.started) // log: false
})

License

MIT

Package Sidebar

Install

npm i abstract-startable

Weekly Downloads

97

Version

3.0.2

License

MIT

Unpacked Size

34.8 kB

Total Files

18

Last publish

Collaborators

  • tjmehta