npm

Ready to take your JavaScript development to the next level? Meet npm Enterprise - the ultimate in enterprise JavaScript.Learn more »

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

install

npm i gocsp

Downloadsweekly downloads

5

version

0.1.0

license

MIT

homepage

github.com

repository

Gitgithub

last publish

collaborators

  • avatar
Report a vulnerability