异步序列流程 v1.0

大家好,第一次在 SegmentFault 上写博客,之前是在 GitHub 上用repo的issue特性写的。不仅仅是为了 GFM 还是因为自己文笔不好,所以有想把自己隐藏起来的想法,我想想这样对自己的进步实在是非常不易的。所以还是决定到一个阳光的地方把自己的小小的积累写出来吧。

废话不多,最近朴灵大大的 《深入浅出Node.js》 估计已经火遍半边天了。盯了好久,我也终于入手了。里面一些章节也写的很棒,我想在第一次粗略浏览的时候做一些读书笔记吧。

初学Node.js给我最头疼的地方差不多就是流程控制了,因为我曾经写过后缀非常长的 })})})}),痛苦异常。查阅了很多资料想解决这个问题,后来因为一些其他原因的关系,暂时停止了node的学习,这个问题就一直保留在心里。我也曾粗略翻阅了ByVoid的书籍也没有找到答案,这次的深入浅出总算给了我一个不错的答案。

第93页前后讲了一些流程控制库,最近尝试过用 Deferred 做一些Promise模式的流程控制。关键API函数就是 then 利用 promisify 创建一个 Deferred Object。其中实现的原理就是在then中返回一个 Promise 对象,类似的使用方式如下。

var readFileAsync = promisify(fs.readFile);
readFileAsync("file1.txt").then(function (content) {
   return readFileAsync("file2.txt");
}).then(function (content) {
   console.log(content);     
});

如果是Async库,则使用一个强大的API叫做waterfall

async.waterfall([
    function (callback) {
        fs.readFile("file1.txt", function (err,content) {
            callback(err,content);
        }
    },
    function (arg1, callback) {
        fs.readFile(arg1, function (err,content) {
        });
    }
]);

我觉得waterfall是很棒的实践。

今天就先读了这么多,下次继续写

    原文作者:Gemini
    原文地址: https://segmentfault.com/a/1190000000361112
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞