我是javascript / node的新手,并且正在构建一个每秒调用Telegram api的类以获取更新和存储,因此我可以让其他函数使用该数据。我已经拼凑了代码形式的示例,但是调用bot.start();
时遇到错误,因为没有函数传递给getUpdates
。我不确定为什么需要(fn)
。
class Bot {
constructor(token) {
let _baseApiURL = `https://api.telegram.org`;
this.baseApiURL = _baseApiURL;
this.token = token;
}
start(){
this.getUpdates();
}
getBaseApiUrl(){
return this.baseApiURL;
}
getToken(){
return this.token;
}
getAPI(apiName) {
return axios.get(`${this.getApiURL()}/${apiName}`);
}
getApiURL() {
return `https://api.telegram.org/bot${this.getToken()}`;
}
getUpdates(fn) {
this.getAPI('getUpdates')
.then(res => {
this.storeUpdates(res.data);
fn(res.data);
setTimeout(() => {
this.getUpdates(fn);
}, 1000);
})
.catch(err => {
console.log('::: ERROR :::', err);
});
}
storeUpdates(data){
console.log(data);
}
}
const bot = new Bot(TOKEN);
bot.start();
答案 0 :(得分:0)
尚不清楚您到底要用该fn
方法实现什么。您没有传递任何方法,因此失败。这会起作用
getUpdates() {
this.getAPI('getUpdates')
.then(res => {
this.storeUpdates(res.data);
setTimeout(() => {
this.getUpdates();
}, 1000);
})
.catch(err => {
console.log('::: ERROR :::', err);
});
}
如果要实现某种观察者模式,则不要将其与getUpdates
方法结合使用,而应创建用于注册观察者的方法,并在存储发生更改时通知他们。
触发重复的方式也不是很好,因为一旦收到错误(使用HTTP方法通常早晚会收到一些ERROR),它将破坏整个流程。 使用类似https://www.npmjs.com/package/cron之类的东西来触发定期操作。