nodejs中的异步函数

时间:2013-11-06 00:28:52

标签: javascript node.js asynchronous

这只是关于nodejs中异步函数的一个小问题,也是创建它们的好方法。以下内容将参数设置为存储库和扩展名,并返回给定存储库中具有给定扩展名的文件列表

运行

$ node app /path/to/some/reposity someExtension

module.js文件

//modules.js
var fs = require('fs');
var path = require('path');
module.exports = function(dir, ext, callback){
    //do something
    fs.readdir(dir, function(err, data){
        if(err){
            //EDIT
            process.nexTick(function(){
                callback(err);
            });
            //
        }
        if(data){
            var compteur = 0;
            var block = [];
            for(var i =0 ; i < data.length ; i++){
                if(path.extname(data[i]).slice(1) == ext){
                    block[compteur]= data[i];
                    compteur++;
                }
            }
            //EDIT
            process.nextTick(function(){
                callback(null, block);
            });
            //
        }

    });
};

app.js文件

//app.js
var dir = process.argv[2];
var ext = process.argv[3];
var module = require('./module');

module(dir, ext, function(err, data){
    if(err) { throw err;}
    var dl = data.length;
    for(var i = 0 ; i < dl ; i++){
        console.log(data[i]);
    }
});

我只是想知道这是做事的好方法还是有更好的做法。提前谢谢。

我在NodeJS中找到关于异步函数的这个很好的教程 http://howtonode.org/understanding-process-next-tick

1 个答案:

答案 0 :(得分:2)

异步编程的标准方法是使用回调,这就是你正在做的事情。由于回调嵌套在异步函数中,因此一旦callstack为空,它就会排队。

另外,不要将任何变量命名为module。这是一个不应该被覆盖的全局变量。