Sas
Sas是一个为了解决Javascript回调地狱而设计的可递归的异步控制库,它使用Array代表串行,使用Object代表并行,使用Function代表任务。串行和并行可无限嵌套,它将会递归执行,无论多深,都能精准的返回你想要的结果。它就是回调地狱终结者。
- 它很小,源代码在包含很多注释和空格的情况下,仍不到200行。
- 它很简单,它只有一个接口:
sas
。 - 它很强大,你可以运行下面的Demo来见识它的威力。
首先你得安装它:npm install sas
Demo: 使用sas寻找磁盘最深处
var fs = require('fs');
var sas = require('sas');
var rootDir = '/', depth = 0, deepestPath;
function readdir(cb, i) {
var indexs = i.indexs(), path = rootDir + indexs.join('/');
if (indexs.length > depth) { //record
depth = indexs.length;
deepestPath = path;
}
fs.readdir(path, function(err, files) {
if (err || !files.length) return cb();
var tasks = {}, i = 0, len = files.length;
for (; i < len; i++) {
tasks[files[i]] = path + '/' + files[i];
}
cb('$reload', tasks);
});
}
function stat(path) { //iterator
return function(cb) {
fs.lstat(path, function(err, stat) {
if (err || stat.isSymbolicLink()) return cb();
if (stat.isDirectory()) {
return cb('$reload', readdir);
}
cb();
});
}
}
console.log('Exploring disk\'s deepest depth...');
console.time('time cost');
sas(readdir ,stat, function() {
console.log('Deepest depth:', depth);
console.log('Deepest path:', deepestPath);
console.timeEnd('time cost');
});
这个demo会异步的浏览你硬盘上所有文件/文件夹,找出最深的那个。最后完美结束,并把结果告诉你。 如果你想知道sas是怎么做到的,请访问:文档。 仓库地址