This question already has an answer here:
So I been started using ES6 in Meteor
, but apparently if you try to use Meteor.publish
syntax with an arrow function, this.userId
is undefined, while if you use it with a regular function(){}
this.userId
works perfectly, Im assuming is a kind of transpiler process that assign a different this, to userId
but is just a guess, does anyone knows what really is happening?
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
});
});
This isn't a transpilation error, it's a feature of arrow functions. The arrow function automatically sets the context of the function body to the contexts here it was created, in this case the callback to Meteor.publish
. This prevents Meteor from rebinding the context of your listener function.
From the Meteor publish docs:
Inside the function, this is the publish handler object
If you want things to work properly you will need to use the "old-school" function syntax to allow Meteor to set the context properly.
来源:https://stackoverflow.com/questions/33056884/es6-arrow-function-is-changing-the-scope-of-this-in-meteor-publish