JavaScript
Switch branches/tags
Nothing to show
Latest commit c94113a Jul 4, 2017 @nucleartide clean up examples
Permalink
Failed to load latest commit information.
examples clean up examples Jul 5, 2017
lib remove tabs Jul 5, 2017
test add flow types, resolve #4 Jul 5, 2017
.flowconfig add flow types Jul 2, 2017
.gitignore add flow types Jul 2, 2017
Readme.md Release 0.0.1 Jul 5, 2017
package.json Release 0.0.1 Jul 5, 2017
yarn.lock add http example, resolve #3 Jul 5, 2017

Readme.md

actor.js

Elixir-style actors in JavaScript. Spawn "processes", then send and receive messages between them – just like you would in Elixir.

You can think of it as co, but with message passing.

Example

const pid = spawn(async function() {
  const msg = await this.receive(mail => {
    if (mail === 'hello') return 'world'
  })

  console.log(msg)
})

pid.send('hello')

See the included examples for more use cases.

Install

$ yarn add actorjs

API

spawn(fn | asyncFn, ...args) => PID

Spawn a "process" that will execute the passed-in function.

const pid = spawn(async function(foo, bar) {
  console.log("wee i'm in a process sorta")
}, 'foo', 'bar')

PID#send(msg)

Send a message to a PID.

pid.send(['ok', 'this is a message'])

this.receive(pattern) => Promise

Block until a received message matches the passed-in pattern function.

The pattern function takes an arbitrary message as input, and returns a result based on that message.

A result of undefined is not considered to be a match, and thus this.receive() will continue blocking.

const pid = spawn(async function() {
  const v = await this.receive(msg => {
    const [status, value] = msg
    if (status === 'hello') return value
    if (status === 'world') return "won't match"
  })
})

pid.send(['hello', 'yes this is dog'])

PID#then(value =>), PID#catch(err =>)

The return value of spawn() is a thenable.

spawn(async function() {
  // ...
})
  .then(value => { /* ... */ })
  .catch(console.error)

License

MIT