channel.js

CSP in JavaScript

Usage no npm install needed!

<script type="module">
  import channelJs from 'https://cdn.skypack.dev/channel.js';
</script>

README

channel

来自clojure世界的csp,用js(web界的C++)实现

使用方法

npm i -S channel.js
const channel = require('channel');
const ch = new channel();

let tosay = [];
let todo = [];

function helloing(){
  ch.go(function*(){
    let i = 0;
    while(true){
      i++;
      yield ch.take(ch.timeout(1000));
      yield ch.put(tosay, "hello world"+i);
    }
  });
}

function walking(){
  ch.go(function*(){
    while(true){
      yield ch.take(ch.timeout(3000));
      yield ch.put(todo, "walking...");
    }
  });
}

function watchHelloing(){
  ch.go(function*(){
    while(true){
      let msg = yield ch.take(tosay);
      console.log(msg);
    }
  });
}

function watchWorking(){
  ch.go(function*(){
    while(true){
      let msg = yield ch.take(todo);
      console.log(msg);
    }
  });
}

watchWorking();
watchHelloing();
helloing();
walking();
/*
hello world1
hello world2
walking...
hello world3
hello world4
hello world5
walking...
  .
  .
  .
*/

响应式编程

现在我们对回调的描述,不再是基于时间线了,而是基于状态,描述事件的发生是分离的。

感谢大clojure群:130107204

感谢大clojure,一直以来对我的帮助,无论是基本的语法还是这个相对core.async而言比较肤浅的小工具,得到了许多很热心的老手及大牛的帮助。