Skip to content
/ chan Public

A go style channel implementation for JavaScript that works well with co

Notifications You must be signed in to change notification settings

brentropy/chan

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

83 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chan

A golang like channel implementation for JavaScript that works well with co.

Build Status Code Climate Dependency Status

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...

About

A go style channel implementation for JavaScript that works well with co

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •