我正在尝试使用node-schedule在类中实现计划的队列处理程序。

但是回调具有不同类的范围,并且无法使用this访问对象成员。有什么建议如何使其工作?

const schedule = require('node-schedule');

class QueueHandler {
  constructor() {
    this.queue = [];
    this.j = schedule.scheduleJob('send', '*/10 * * * * *', this.parseNext);
    this.sendJob = schedule.scheduledJobs['send'];
  }

  // this one called from outside
  fillQueue(rows) {
    rows.forEach(user => {
      this.queue.push(user);
    });
  }

  parseNext() {
    if (this.queue.length > 0) {  // here comes the problem - this.queue undefined
      const next = this.queue.shift();
      // do some manipulations with the next item
    } else {
      console.log('empty queue');
    }
  }
}

module.exports.QueueHandler = QueueHandler;

最佳答案

答案在您的问题中,您可以使用bind

this.j = schedule.scheduleJob('send', '*/10 * * * * *', this.parseNext.bind(this));


或者您可以使用arrow syntax

schedule.scheduleJob('send', '*/10 * * * * *', x=>this.parseNext(x));

关于javascript - 如何在类(class)内将其绑定(bind)到计划的工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48860060/

10-10 18:58