Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all articles
Browse latest Browse all 14821

sas就是回调地狱终结者!

$
0
0

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是怎么做到的,请访问:文档仓库地址


Viewing all articles
Browse latest Browse all 14821

Trending Articles