Javascript:同步到asynchronous转换器库

1)什么是更好的streamlinejs: https : //github.com/Sage/streamlinejs或叙述: http : //www.neilmix.com/narrativejs/ ? 任何其他库?

2)这些图书馆如何工作? (我阅读文档,我正在寻找一个简单的解释幕后发生的事情..)

至于问题#2 ….一般来说这些事情:

  1. 将JavaScriptparsing为一些抽象语法树(AST)
  2. 转换AST
  3. 将变换的树串化为javascript

我早就写了一个部分转换器作为学习经验。 我用uglify.js来parsing一个AST,然后用lib提供的tree walker来进行转换。 转换是通用目的,并产生看起来像一个状态机的代码 – 每个步骤开始于一系列0或更多同步操作,并以asynchronous操作结束。 例如这个简单的脚本:

var fs = require('fs'); console.log(fs.readFile('input.js', _).toString('utf-8')); 

将被转换为:

 var fs, $v_0; function s_0() { fs = require("fs"); fs.readFile("input.js", function(err, res) { if (err) s_err(err); else { $v_0 = res; s_1(); } }) } function s_1() { console.log($v_0.toString("utf-8")); } s_0() 

我想像简化和类似的做一些非常相似的事情。 某些结构(循环,try / catch)需要特殊的处理,但一般的方法是相同的 – 转换成状态机。

我发现这个方法的问题是:

1)这不是一个本地问题 – 即任何需要处理的asynchronous行为都会感染调用堆栈中的所有内容。

2)你需要function元数据,所以你必须作出假设或要求人们以某种​​方式注释他们的function。