Meteor js 类和内容

3

我正在尝试在我的项目中使用Meteor类。在我的类中,我使用了一个npm模块nodemailer,该模块提供了一个自定义处理程序来设置socket,如下所示:

var nodemailer = require('nodemailer');

var transport = nodemailer.createTransport({....});

transpot.getSocket = function (options, callback) {  // <-- here
   console.log('get socket');
}

所以我尝试使用类在Meteor代码中包装它:

var nodemailer = Meteor.npmRequire('nodemailer');

class TestNodemailerMeteor {

    constructor(options) {
           //....  
         this.name = options.name;
    }
    initMailer(){
        this.transport = nodemailer.createTransport({//set options});

        this.transport.getSocket = this.getSocket;


    }
    getSocket(options, callback){
          // 
         console.log(this.name); // this.name is undefined, lost this context here
    }
}

问题是,当模块调用transport.getSocket时,我失去了所有变量和方法的类上下文。有没有办法将模块函数附加到类对象方法上,而不会失去类上下文?

1个回答

1

使用Function.prototype.bind()应该是可行的。尝试这样做:

    this.transport.getSocket = this.getSocket.bind(this);

这可能是使用bind的正确方法,但希望这能引导你走向正确的方向。


谢谢,这帮助了我。现在我开始理解如何解决上下文问题了。 - Vladislav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接