Javascript this.u 在函数中使用时未定义

Javascript this.u undefined when using in function

我正在 node.js 中编写一个 discord 机器人,我正在开发一项功能,该机器人从启动开始每小时执行一次功能。

在这个例子中,为了测试,我用 setTimeout 替换了 setInterval。

class Controller {

    constructor() {
            this.u = new u.Util();
            this.prefix = ".";
    }

    updateRanks(guilds){

            guilds.forEach(g => {

                this.u.updateRanksAuto(g);

                setTimeout(function(){
                    this.u.updateRanksAuto(g);
                }, 6000 );
            });
    }
}

我第一次调用 this.u.updateRanksAuto(g) 它工作得很好,但显然这只执行了一次。

当我在函数中尝试它时,它告诉我 this.u 未定义。

我觉得这是一个明显的错误,但我想不通。

function() 创建新的上下文,所以 this 指的是这个函数。 您可以改用箭头:

setTimeout(() => 
{
    this.u.updateRanksAuto(g);
}, 6000 );

或将 this 存储在某个变量中或使用 .bind(this)

试试这个解决方案,如果有效请告诉我

class Controller {

    constructor() {
            this.u = new u.Util();
            this.prefix = ".";
    }

    updateRanks(guilds){
            let that = this;
            guilds.forEach(g => {

                that.u.updateRanksAuto(g);

                setTimeout(function(){
                    that.u.updateRanksAuto(g);
                }, 6000 );
            });
    }
}