如何以JSLint批准的方式重写此循环?

时间:2016-12-28 23:17:01

标签: javascript node.js jslint

查看来自https://github.com/jprichardson/node-fs-extra#walk的“Streams 2& 3(pull)示例”

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批准的方式编写它。有什么建议吗?

(注意:我知道此代码中还有其他JSLint违规行为......我知道如何解决这些问题......)

1 个答案:

答案 0 :(得分:3)

如果您真的对编写像Douglas 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);
});