Asynchronous Javascript:sync-to-async转换器libs
1) 什么是更好的streamlinejs: 或叙述:?还有其他的Lib吗 2) 这些图书馆是如何运作的? (我读了文件,我想对幕后发生的事情做一个简单的解释。至于问题2……一般来说:Asynchronous Javascript:sync-to-async转换器libs,asynchronous,node.js,javascript,Asynchronous,Node.js,Javascript,1) 什么是更好的streamlinejs: 或叙述:?还有其他的Lib吗 2) 这些图书馆是如何运作的? (我读了文件,我想对幕后发生的事情做一个简单的解释。至于问题2……一般来说: 将javascript解析为某种抽象语法树(AST) 转换AST 将转换后的树重新字符串化为javascript 不久前,我写了一个部分转换器作为学习体验。我使用uglify.js解析为AST,然后使用lib提供的树遍历器进行转换。这些转换是通用的,生成的代码看起来像一个状态机——每个步骤都以0个或多个同步操作序
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) 这不是本地问题,也就是说,任何需要处理的异步行为都会影响调用堆栈上的所有内容
2) 您需要函数元数据,因此您必须做出假设,或者要求人们以某种方式对其函数进行注释。我强烈建议使用类似的againts库,因为它为您编写了太多的黑魔法,并限制了您对该语言的使用。最好学习如何编写编写良好的异步代码。然而,我确实推荐作为一个伟大的流控制库(功能强大)。在我的项目中,这是必须的,但我希望尽可能减少它,因此我尝试了解它是如何工作的,并编写类似的东西。只需使用Futures,它为您提供了一个Promise API并异步编写代码。不要抽象出nodejs是异步和非阻塞的事实,否则会导致大的维护问题。不过,请看一下文档,看看它编译成了什么。