ES6箭头功能正在改变Meteor.publish中的范围

ncu*_*ica 9 javascript meteor ecmascript-6 meteor-publications

所以我开始使用ES6 Meteor,但显然如果你试图使用Meteor.publish箭头函数的语法,this.userId是未定义的,而如果你使用它与常规的function(){} this.userId工作完美,我假设是一种转换过程,分配不同的这个,到userId但只是一个猜测,有谁知道到底发生了什么?

Meteor.startup(function() {
    Meteor.publish("Activities", function() { //with function
        console.log(this.userId); //TS8vTE3z56LLcaCb5
    });
});

Meteor.startup(function() {
    Meteor.publish("Activities", ()=> { //with arrow function
        console.log(this.userId); //undefined
    });
});
Run Code Online (Sandbox Code Playgroud)

Nic*_*lin 7

这不是一个转换错误,它是箭头函数的一个特性.箭头函数自动将函数体的上下文设置为它创建的上下文,在这种情况下是回调Meteor.publish.这可以防止Meteor重新绑定侦听器函数的上下文.

来自Meteor 发布文档:

在函数内部,这是发布处理程序对象

如果你想让事情正常工作,你需要使用"old-school"函数语法来允许Meteor正确设置上下文.