2016-12-28 3 views
1

Глядя на на "Streams 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] 
    }) 

Последняя версия JSLint жалоб о while:

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

Я пытаюсь выяснить, как написать это в одобренном JSLint способом. Какие-либо предложения?

(Примечание: Я знаю, есть и другие нарушения JSLint в этом коде ... Я знаю, как исправить те ...)

+0

Вы имели в виду использовать '==' для сравнения? –

+1

, если вы сравниваете, не должно быть 'while ((item === this.read()))' –

+2

@ A.J Нет, это назначение, которое, как ожидается, вернет правдивое значение здесь. И JSLint им не нравится, слишком много вещей происходит в одном наборе выражений. – axelduch

ответ

3

Если вы действительно заинтересованы в написании этого кода, как Дуглас Crockford (автор 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 Обновлено, удалить 'this' – 4castle

+0

awesome thanks! – boozedog

Смежные вопросы