gocsp

0.1.0 • Public • Published

Communication Sequential Processes in Javascript

Bring Golang-like CSP channel to JS land.

It's based on Promise and works well with generator or async-await function.

Installation

$ npm install gocsp

Usage

Very similar to how channel works in Golang. You can take, put or select values from channels.

var co = require('co')
var csp = require('gocsp')
 
// from http://talks.golang.org/2013/advconc.slide#6
 
var player = co.wrap(function* (name, ch) {
    for (;;) {
        var ball = (yield csp.take(ch)).value
        ball += 1
        console.log(name, ball)
        yield csp.timeout(100)
        yield csp.put(ch, ball)
    }
})
 
co(function* () {
    var ch = csp.chan()
 
    player('ping', ch)
    player('pong', ch)
 
    yield csp.put(ch, 0)
    yield csp.timeout(1000)
    yield csp.take(ch)
})

API

csp.chan(size)

Create a channel. You can optional support a queue size, default is 0.

csp.chan() // without queue
 
csp.chan(2) // with queue size 2

csp.take(ch)

Take a value from channel, returns a promise

csp.take(ch).then(function (result) {
    var { done, value } = result
    if (done) {
        // channel is closed, fail to take a value
    } else {
        // success to take value
        console.log(value)
    }
})

csp.put(ch, value)

Put a value into channel, return a promise

csp.put(ch, value).then(function (ok) {
    // if success, then `ok === true`
    // if failed (e.g. channel closed), then `ok === fasle`
})

csp.close(ch)

Close a channel. When channel is closed, you cannot put values into it anymore. You may still be able to take remaining queued values from channel.

csp.close(ch)

csp.select(fn)

Choose one of a set of take or put, timeout operations. At most one will success and rest will be cancelled.

csp.select(function (s) {
    s.take(ch, function (result) {
        // like `csp.take`, result have two property: `done` & `value`
        var { done, value } = result
    })
    ||
    s.put(ch2, value, function (ok) {
        // ok is boolean
    })
    ||
    s.timeout(1000, function () {
 
    })
    ||
    s.default(function () {
        // if none of above chosen. They will all be cancelled.
        // and this function will be called.
    })
})

License

MIT

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 0.1.0
    0
    • latest

Version History

  • Version
    Downloads (Last 7 Days)
    • Published
  • 0.1.0
    0
  • 0.0.4
    1
  • 0.0.3
    1
  • 0.0.2
    0
  • 0.0.1
    0

Package Sidebar

Install

npm i gocsp

Weekly Downloads

1

Version

0.1.0

License

MIT

Last publish

Collaborators

  • gyson