所以我开始在Meteor
中使用ES6,但显然,如果你尝试使用带有箭头函数的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
});
});
这不是翻译错误,这是箭头函数的一个特性。箭头函数自动将函数体的上下文设置为它创建时的上下文,在本例中是对Meteor.publish
的回调。这可以防止Meteor重新绑定侦听器函数的上下文。
From the Meteor publish docs:
在函数内部,这是发布处理程序对象
如果你想让事情正常工作,你需要使用"老派"函数语法来允许Meteor正确设置上下文