await-notify

Java like wait and notify for JavaScript ES7 async/await

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
await-notify
031.0.17 years ago7 years agoMinified + gzip package size for await-notify in KB

Readme

Simple library providing Java like wait and notify functionality for async/await syntax.
Works in Node (or browser via Browserify or Webpack) when Promise and async/await syntax are enabled.
Install
npm install --save await-notify
Usage
const { Subject } = require('await-notify');
const event = new Subject();

(async () => {
  while (true) {
    await event.wait();
    console.log('Event occured');
  }
})();

setTimeout(() => {
  event.notify();
}, 1000);
API reference

Subject

A class representing subjects that could be waited for and notfied on.

Subject.prototype.wait(timeout = Infinity)

Returns a promise that will be resolved either when the subject is been notfied or when timeout occurs.
timeout parameter is in milliseconds, and no timeout will occur if not set to an finite number greater than 0.
The promise resolves false if timeout occurs, resolves true otherwise.
const subject = new Subject();

(async () => {
  const notTimeout = await subject.wait();
  ...
})();

Subject.prototype.notify()

Resolve one waiting session. Does nothing if no one is waiting on this subject.
Return nothing and thus should not be used with await.
subject.notify();

Subject.prototype.notifyAll()

Similar to notify but notifies all waiting session.
Tips

Pass data to the waiter when calling notify

There's no fancy way to do this, but a Subject instance is just another plain JavaScript object which you can freely assign parameters to. So you may just do this:
const { Subject } = require('await-notify');
const event = new Subject();

(async () => {
  while (true) {
    await event.wait();
    console.log('Event occured with message:'. event.message);
  }
})();

setTimeout(() => {
  event.message = 'Hello there';
  event.notify();
}, 1000);

Use without async/await

Under the hood, async/await are just sugar syntax for using Promise. So using promise directly is fine.
const { Subject } = require('await-notify');
const event = new Subject();

function listen() {
  event.wait().then(() => {
    console.log('Event occured');
    listen();
  });
}
listen();

setTimeout(() => {
  event.message = 'Hello there';
  event.notify();
}, 1000);