2016-12-16 9 views
0

私は、渡すパラメータとコールバック関数を持つscandir()関数を呼び出しています。その関数が完了すると、私はそのコールバックを呼び出しますが、私はcallback is not a functionを取得します。私はどこに間違っているのか理解していない。どんな助けもありがたい。NodeJS提供のコールバック関数が 'コールバックは関数ではありません'を返します。

スクリプトファイル:

scan_dir(working_dir, function(items){ 
    console.log('done'); 
    dir_items = items; 
    console.log('items', dir_items); 
}); 

機能ファイル:

var scan_dir_count = 0; 

function scan_dir(path, callback){ 
    scan_dir_count++; 

    fs.readdir(path, function(err, files){ 
     files.forEach(function(item, index){ 
      //console.log(index, item); 
      if (fs.lstatSync(path + '/' + item).isDirectory()){ 
       files.push(path + '/' + scan_dir(path + '/' + item)); 
      } 
     }); 
     scan_dir_count--; 

     if (scan_dir_count == 0){ 
      console.log('end'); 
      callback(files); 
     } 
    }); 

} 

感謝。

EDIT:4castレスポンスに更新されました。もはやすべてのエラーを返しますが、コールバック関数が発射されていないようです...

var scan_dir_count = 0; 

function scan_dir(path, callback){ 
    scan_dir_count++; 

    fs.readdir(path, function(err, files){ 
     files.forEach(function(item, index){ 
      //console.log(index, item); 
      if (fs.lstatSync(path + '/' + item).isDirectory()){ 
       scan_dir(path + '/' + item, function(data){ files.push(item + '/' + data); }); 
      } 
     }); 
     scan_dir_count--; 

     if (scan_dir_count == 0){ 
      console.log('end'); 
      console.log(files); 
      callback(files); 
     } 
    }); 

} 
+2

あなたは 'scan_dir path + '/' + item) 'コールバックなし。 – 4castle

+0

もちろん、意味があります。だから私は 'function(){}'を追加しましたが、ちょっと気分が悪いようですが、最終的なコールバックは起動しないようですが、 'console.log( 'end')'はコンソールです。 log( 'items'、item) 'はありません。 – Jam3sn

+0

これは変です。おそらくコールバックに 'files.push'を入れたいと思うでしょう。 'scan_dir'は何も返しません。 – 4castle

答えて

0

あなたは関数が発生しませんと確信していますか?私は、サンプルフォルダのアドレスを与え、それがOKを動作しているようだ:

私は応答としてこれを得た:

エンド [「config.html」、「config.html〜」、「config.jsのを'、' config.js〜 '] done [' config.html '、' config.js '、' config.js〜 ']

関連する問題