/lingering

When you need to finish what you've started.

Primary LanguageJavaScript

lingering

Shutdown cleaner

install

With npm do:

npm install lingering

usage

var lingering = require('lingering');

lingering(function synchronous() {
  console.log('My job here is done');
});

lingering('asynchronous', function (done) {
  setTimeout(function () {
    console.log('Did I really do a great job?');
    done();
  }, 500);
});

console.log('Let\'s start this.');

setTimeout(function () {
  console.log('OK, let\'s finish this.');

  process.kill(process.pid, 'SIGTERM');
}, 100);

/*
Let's start this.
OK, let's finish this.
Terminating due to SIGTERM signal, calling all handlers...
My job here is done
Did I really do a great job?
[synchronous] terminated peacefully.
[asynchronous] terminated peacefully.
*/

error handling

var lingering = require('lingering');

lingering(function synchronousError() {
  throw new Error('It won\'t go as planned');
});

lingering('asynchronousError', function (done) {
  setTimeout(function () {
    done(new Error('I feel a bit mischievous'));
  }, 500);
});

console.log('Will everything be alright?');

setTimeout(function () {
  console.log('I\'ll try my best finishing this up.');

  process.kill(process.pid, 'SIGTERM');
}, 100);

/*
Will everything be alright?
I'll try my best finishing this up.
Terminating due to SIGTERM signal, calling all handlers...
[synchronousError] terminated with error: Error: It won't go as planned
    at synchronousError (.../lingering/examples/errors.js:4:9)
    at Object.func (.../lingering/index.js:7:27)
    at .../lingering/index.js:53:13
    at Array.forEach (native)
    at processHandlers (.../lingering/index.js:52:16)
    at onSignal (.../lingering/index.js:86:3)
    at emitNone (events.js:67:13)
    at process.emit (events.js:166:7)
    at Signal.wrap.onsignal (node.js:790:46)
[asynchronousError] terminated with error: Error: I feel a bit mischievous
    at null._onTimeout (.../lingering/examples/errors.js:9:10)
    at Timer.listOnTimeout (timers.js:89:15)
*/