5

(javascriptから変換された)ディレクトリを再帰的にリストするために、coffeescriptに次のコードがあります。

fs = require 'fs'

walk = (dir, done) ->
  results = []
  fs.readdir dir, (err, list) ->
    return done(err) if err
    pending = list.length
    return done(null, results) unless pending
    list.forEach (file) ->
      file = "#{dir}\\#{file}"
      fs.stat file, (err, stat) ->
        if stat and stat.isDirectory()
          walk file, (err, res) ->
            results = results.concat(res)
            done null, results  unless --pending
        else
          results.push file
          done null, results  unless --pending

walk __dirname, (err, results) ->
  throw err if err
  console.log results

ご覧list.forEach (file) ->のとおり、私は使用していて、機能しています。しかし、それを置き換えようとするとfor file in list、正しく機能しません。私は何を間違えますか?

4

1 に答える 1

10

ループ内で関数を定義しています。JSでよくある落とし穴。イテレータを閉じる必要があります。

for file in list then do (file) =>

于 2012-07-19T19:05:17.007 に答える