节点类启动功能

时间:2020-06-14 22:44:22

标签: javascript node.js

我是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();

1 个答案:

答案 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之类的东西来触发定期操作。