chan
v0.6.1
Published
A go style channel implementation that works nicely with co
Downloads
106,723
Maintainers
Readme
Chan
A golang like channel implementation for JavaScript that works well with co.
Features
- CSP Style channels in JavaScript
- Buffered or Unbuffered channels
- Channels can be closed
- API designed to work well with generators and co
- Can be used without generators
- Channels can be selected similar to Go's select statement
Installation
$ npm install chan --save
The Basics
Chan is inspired by golang's channels. It is implemented as a function that represents an asynchronous first in first out queue.
var makeChan = require('chan')
// make a new unbuffered channel
var ch = makeChan()
typeof ch // -> 'function'
Sending values to the channel
Values are added to the
channel by calling the function with either (value)
or (error, value)
. The
return value is a thunk (a function that take a node-style callback as its only
argument). The callback given to the thunk is called once the value is added.
ch('foo')(function (err) {
if (err) {
// There was an error putting the value on the channel
} else {
// The value was successfully put on the channel
}
})
Receiving values from the channel
Values are removed from the channel by calling it with a node-style callback as this first argument. When a value is available on the channel the callback is called with the value or error. In this case the channel itself can also be a thunk.
ch(function (err, val) {
// called when there is a value or error on the channel
})
Generators
Because thunks are yield-able in a co generator, chan works very well when combined with co. Using them together makes chan feel very similar to go channels.
var co = require('co')
co(function *() {
var val = yield ch
})
co(function *() {
yield ch('foo')
})
Buffer
Docs coming soon...
Close
Docs coming soon...
Select
Docs coming soon...