9

所以我开始在 ES6 中使用 ES6 Meteor,但显然如果您尝试使用Meteor.publish带有箭头函数的语法,this.userId则未定义,而如果您将其与常规function(){} this.userId作品一起使用,则可以完美地工作,我假设是一种分配不同 this 的转译器过程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
    });
});
4

1 回答 1

7

这不是编译错误,它是箭头函数的一个特性。箭头函数自动将函数体的上下文设置为它在此处创建的上下文,在本例中为Meteor.publish. 这可以防止 Meteor 重新绑定侦听器函数的上下文。

来自 Meteor发布文档

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

如果你想让事情正常工作,你将需要使用“老派”函数语法来允许 Meteor 正确设置上下文。

于 2015-10-10T17:36:13.923 回答