如何在 Node 中使用 fs.readFile 中的 'this' 引用.js



我想使用我的javascript类的 this关键字

使用fs.readfile方法从文件中填充对象列表
var MyReaderClass = (function() {
    //Const    
    function MyReaderClass() {
        this.readObjects = [];
        /**    
         * Default constructor for the MyReaderClass class
         */
        var _constructor = function() {
        }
        _constructor.call(this);
    }
    //Public    
    MyReaderClass.prototype.ReadFiles = function(p_path) {
        var files = fs.readdirSync(p_path);
        for (var i in files) {
            var fileName = files[i];
            fs.readFile(path.join(p_path, fileName), 'utf8', function(err, data) {
                if (err) {
                    return console.log(err);
                } 
                else {
                    var formattedData = /*... Logic to format my data into an object*/;
                    this.readObject.push(formattedData); //The "this" is not the reference to my class.
                }
            });
        }
    }
    return MyReaderClass;
})();

即使我正在创建此变量的本地实例(_self, that, instance, etc.),在readFile方法之外,我的本地实例也不会填充。

知道我该如何完成?

readFile是异步方法,您将失去execute context。您需要绑定类,以将回调作为上下文读取。使用Function.prototype.bind

MyReaderClass.prototype.ReadFiles = function(p_path) {
    var files = fs.readdirSync(p_path);
    for (var i in files) {
        var fileName = files[i];
        fs.readFile(path.join(p_path, fileName), 'utf8', function(err, data) {
            /*readFile callback*/
        }.bind(this));//also here was a syntax error
    }
}

最新更新