繁体   English   中英

使用Babel编译的es2015类方法的递归方法调用

[英]Recursive method call on es2015 class method transpiled with babel

我尝试递归调用实例方法时遇到问题。

该代码如下所示:

import fs from 'fs';
import fsWatcher from 'filewatcher';
import path  from 'path';

export default class SearchService {
initializeFileWatcher(foldersToWatch) {
    let result = fsWatcher();
    for (var i = 0; i < foldersToWatch.length; i++) {
        result.add(foldersToWatch[i]);
    }
    return result;
}

  getFilesFromDirectoriesRecursively(directories, fileExtension) {
    let result = [];

    for (var i = 0; i < directories.length; i++) {
        var dir = directories[i];
        var list = fs.readdirSync(dir);
        list.forEach(function (file) {
            file = dir + '/' + file;
            var stat = fs.statSync(file);
            if (stat && stat.isDirectory())
                result = result.concat(this.getFilesFromDirectoriesRecursively([file], fileExtension).bind(this));
            else
            if (path.extname(file) === fileExtension)
                result.push(file);
        });
    }
    return result;
}

getFilesFromDirectory(directory, fileExtension) {
    var result = [];
    var files = fs.readdirSync(directory);
    for (var i = 0; i < files.length; i++) {
       if (files[i].endsWith(fileExtension))
           result.push(files[i]);
    }
    return result;
}

}

该代码随babel-es2015一起编译,并在电子应用程序环境中运行。 没有当我尝试调用该方法getFilesFromDirectoriesRecursively内部本身transpiled码获得,因为里面点到实例中ES2015而不是在transpiled代码的麻烦。

我该如何解决这个问题?

我可以解决问题。 正如@zerkms提到的那样,使用this关键字为false。 我试图将.bind关键字绑定,但不适用于匿名函数。

所以我应用了这里描述的解决方案: 如何将上下文传递给forEach()匿名函数

list.forEach( (file) => {
            file = dir + '/' + file;
            let stat = fs.statSync(file);
            if (stat && stat.isDirectory())
                result = result.concat(this.getFilesFromDirectoriesRecursively([file], fileExtension));
            else
            if (path.extname(file) === fileExtension)
                result.push(file);
        }, this);

现在,它经过闭合上在foreach函数调用

编辑:

不必通过此操作,因为arrow函数正在执行此操作。

list.forEach( (file) => {
        file = dir + '/' + file;
        let stat = fs.statSync(file);
        if (stat && stat.isDirectory())
            result = result.concat(this.getFilesFromDirectoriesRecursively([file], fileExtension));
        else
        if (path.extname(file) === fileExtension)
            result.push(file);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM