ES6 Arrow function is changing the scope of this in Meteor.publish [duplicate]

百般思念 提交于 2019-11-29 18:39:40

问题


This question already has an answer here:

  • What does “this” refer to in arrow functions in ES6? 7 answers

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
    });
});

回答1:


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!