2016-12-28 5 views
1

"ストリーム2 & 3(プル)の例" から:https://github.com/jprichardson/node-fs-extra#walkこのwhileループはJSLintで承認された方法でどのように書き直すことができますか?見てみると

var items = [] // files, directories, symlinks, etc 
var fs = require('fs-extra') 
fs.walk(TEST_DIR) 
    .on('readable', function() { 
    var item 
    while ((item = this.read())) { 
     items.push(item.path) 
    } 
    }) 
    .on('end', function() { 
    console.dir(items) // => [ ... array of files] 
    }) 
whileについてJSLintの苦情の

最新版:

Unexpected statement '=' in expression position. 
       while ((item = this.read())) { 
Unexpected 'this'. 
       while ((item = this.read())) { 

私はどのように把握しようとしていますこれをJSLintで承認された方法で記述します。助言がありますか?あなたはダグラス・クロックフォードのよ​​うにこのコードを書くことに本当に興味があるなら

+0

比較に '=='を使用しましたか? –

+1

もしそれが 'while((item === this.read()))' –

+2

@ A.Jでないなら、比較してください。いいえ、それはここで真実の値を返すと予想される課題です。そしてJSLintはこれらを気に入らないので、単一の式セットではあまりにも多くのことが起こります。 – axelduch

答えて

3

(:

(私は...このコードでは、他のJSLint違反が承知している私は、これらの問題を解決する方法を知っている...注意してください) JSLintの著者)では、whileループの代わりに再帰を使用します。これは、ES6でテールコールの最適化が行われるためです。

var items = []; 
var fs = require("fs-extra"); 
var files = fs.walk(TEST_DIR); 
files.on("readable", function readPaths() { 
    var item = files.read(); 
    if (item) { 
     items.push(item.path); 
     readPaths(); 
    } 
}).on("end", function() { 
    console.dir(items); 
}); 
+0

お返事ありがとうございます。あなたはどうしたら「これ」を取り除くことができますか? – boozedog

+0

@boozedog更新済み、これを削除するには – 4castle

+0

素晴らしい感謝! – boozedog

関連する問題