gpt4 book ai didi

javascript - "this"setTimeout自执行函数内未定义

转载 作者:行者123 更新时间:2023-11-27 23:22:26 26 4
gpt4 key购买 nike

我知道 setTimeout 中的 this 默认情况下对应于 window,所以我一直在使用 bind 并将其传递给自执行函数,但是当 setTimeout 最终运行时(第一次运行时很好,由 TeaBot._manageTeaRound 调用) (),但自执行时不行)这是未定义的。这是我的代码,我哪里出错了? (我删除了一些可能不相关的代码行)。感谢您的帮助:)

TeaBot.prototype._manageTeaRound = function(originalMessage, channel){
var self = this;
self.teaMaker = this._getUserById(originalMessage.user);

//now wait 3 minutes for people to send their order
self._runTimer(self,channel);
}
TeaBot.prototype._runTimer =function(self, channel) {
// do stuff
console.log(self.teaMaker.name); //undefined

var interval = self.interval,
teaMaker = self.teaMaker;

console.log("self.interval is " + self.interval);

if(interval === 0){

interval++;
self.interval = interval;

setTimeout(self._runTimer.bind(self, channel), 180000);

}else{
self.interval = 0;
}
}

最佳答案

这一行有问题:

setTimeout(self._runTimer.bind(self, channel), 180000);

函数 TeaBot.prototype._runTimer 期望 self 为第一个参数 - Function.prototype.bind() 第一个参数是 context(函数的this)。尝试像这样使用它:

setTimeout(self._runTimer.bind(self, self, channel), 180000);

或者将context留空,因为您根本没有使用this:

setTimeout(self._runTimer.bind(undefined, self, channel), 180000);

关于javascript - "this"setTimeout自执行函数内未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35273764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com