1

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

4

1 に答える 1

2

非同期でプログラミングする標準的な方法は、コールバックを使用することです。これは、あなたが行っていることです。コールバックは非同期関数内にネストされているため、コールスタックが空になるとキューに入れられます。

また、変数に名前を付けないでくださいmodule。上書きしてはいけないグローバル変数です。

于 2013-11-06T00:34:55.510 に答える