Clojure前端开发栈: 基于ClojureScript的Core.Async

Core.Async是一个基于ClojureScript前端开发库包,见:Github案例
传统的异步编程问题:
1.嵌套的回调难以维护和理解
2.JS是单线程
3.JS promises虽然改进很多,易于阅读,虽然没有嵌套回调,还是有很多回调链。
4.JS ES6 generator相当低级别,Core.Async能发挥同样的优点,但是抽象级别更高。

ClojureScript的特点:
1.Cognitect 编写应用的同样类型,但是更简单。
2.不可变性
3.ClojureScript能够使用Clojure 平台和JS运行库包有很好交互。

为什么要使用ClojureScript?
1.首先能和JS运行库包有很好交互
2.能够平衡Google的Clojure编译库包
JS会有很多打包和交付的方法,但是CLjs只使用Closure;超级小和压缩,无膨胀代码;基于Battle(Battle-tested )测试标准库包,能支持IE6.

Core.Async是什么?
1.基于CSP(communicating sequential processes),能一次性获取异步任务和异步流队列(如鼠标移到)。
2.Go blocks能将表面上堵塞的操作切换非堵塞,即使在单线程场景下。

Core.Async术语:
1. Channel: 不同进程之间的管道,可以放入或取出值。涉及两个子术语:Buffer – channel使用它们配置backpressure, 处理事件的奔流burst; Transducer:有效控制数值进入和推出Channel

2. Go block: 一个异步非堵塞执行代码块,但是表面上好像是堵塞操作,方便习惯顺序编程者。

Core操作:
1.将值放入channel
2.将值取出Channel
3.基于多Channel的选择