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

时间:2015-10-10 17:29:17

标签: javascript meteor ecmascript-6 meteor-publications

所以我开始在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
    });
});

1 个答案:

答案 0 :(得分:7)

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

来自流星publish docs

  

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

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