seneca-promise
TypeScript icon, indicating that this package has built-in type declarations

1.2.0 • Public • Published

Seneca

Seneca Promise

npm version Dependency Status Build Status Coverage Status

  • Node: 8.x
  • Seneca: 2.x - 3.x

This plugin adds a series of methods to the seneca instance that allow for promises and async/await. For lots of examples, refer to the tests.

If you're using this module, and need help, you can:

If you are new to Seneca in general, please take a look at senecajs.org. We have everything from tutorials to sample apps to help get you up and running quickly.

Install

npm install seneca-promise

Quick Example

 
const seneca = Seneca()
seneca.use(SenecaPromise)
seneca.ready(() => {
 
  // you can throw errors!
  seneca.addAsync('cmd:error', async () => {
    throw new Error('aw snap!')
  })
 
  // you can await other actions!
  seneca.addAsync('cmd:test', async function (msg) {
    await this.actAsync('cmd:error', msg)
  })
 
  // and call into prior actions with `priorAsync`!
  seneca.addAsync('cmd:test', async function (msg) {
    return await result = this.priorAsync(msg)
  })
 
  // and you can even wrap methods!
  seneca.wrapAsync('cmd:*', async function (msg) {
    console.log('Received cmd', msg.pattern)
    return await this.priorAsync(msg)
  })
 
})
 

Usage with TypeScript

npm i -D typescript @types/seneca

By requiring seneca-promise the seneca Instance type will be modified to include addAsync, actAsync, wrapAsync and priorAsync. You must still use this plugin for the functions to show up properly on the seneca instance!

import Seneca = require('seneca')
import SenecaPromise = require('seneca-promise')
const seneca = Seneca()
seneca.use(SenecaPromise)
seneca.addAsync // huzzah!

Each method takes the following generic type parameters:

  • Action - first parameter (jsonic) provided to the functions
  • Params - second parameter (object) provided to the functions
  • Response - type of the response (includes both action & params)

The action and params are somewhat exchangable the same way the following are equivelent in seneca using js:

seneca.add('role:user,cmd:test', () => {})
seneca.add('role:user', {cmd: 'test'}, () => {})
seneca.add({role:user}, {cmd: 'test'}, () => {})

For a full example, refer to the test file

API

  • addAsync Same as add but allow you to return a promise.

  • wrapAsync Same as wrap but allows you to return a promise

  • priorAsync Same as prior but allows you to return a promise.

  • actAsync Same as act but returns a promise.

Dependents (0)

Package Sidebar

Install

npm i seneca-promise

Weekly Downloads

8

Version

1.2.0

License

MIT

Unpacked Size

16.3 kB

Total Files

17

Last publish

Collaborators

  • tswaters