Skip to content

Command Executor

Joshua Jung edited this page Feb 24, 2017 · 3 revisions

The Ringa Command (src) class is more or less a glorified function executor.

Example:

import {Command} from 'ringa';

export default class ShowTheNews extends Command {
  execute(news /* injections */) {
    console.log(`Here's todays happenings: ${someInjection}`);
  }
}

One of the biggest advantages of Command executors over a default function executor is that they can be extended.

import MyCommand from './MyCommand';

export default class ShowTheNewsWithAttitude extends ShowTheNews {
  execute(news, noAttitude) {
    if (noAttitude) {
      return super.execute(news);
    }

    console.log(`Yo, some things happened and stuff. Here ya go: ${news}`);
  } 
}

Promises

Like the function executor, Command executors can return a promise and Ringa will wait for the promise to resolve or be rejected before continuing (or killing the thread).

import {Command} from 'ringa';

export default class ShowTheNews extends Command {
  execute(someAPI) {
    return new Promise((resolve, reject) => {
      someAPI.getTheNews().then(result => {
        console.log(`Well, I guess there was some news today! ${result}`);
        resolve(result);
      }).catch(reject);
    });
  }
}

If you find yourself tempted to string Promises together in Ringa, they probably should be split into their own executors to make your code more readable and extensible.

Clone this wiki locally