Meteor bindEnvironment 中的规则引擎函数丢失了它的 this 对象

rule engine function inside Meteor bindEnvironment losing its this object

var process_request_rule = [
  {
    "name": "rule-name",
    "condition": Meteor.bindEnvironment(function (R) {
      R.when(this.request.type == 'some-type');
    })
  }];

在上面的代码中,this.request 变得未定义,因为 this 指向 Meteor 对象而不是函数对象.经过研究得知使用箭头函数可能会解决问题。尝试使用它,如下所示。

var process_request_rule = [
  {
    "name": "rule-name",
    "condition": Meteor.bindEnvironment((R) => {
      R.when(this.request.type == 'some-type');
     })
  }];

还是不行,请帮我绑定this对象

您可以使用 Meteor.bindEnvironment 删除或只使用传递给 condition 回调的第二个参数——它与假定的 this 相同。 https://github.com/mithunsatheesh/node-rules/blob/master/lib/node-rules.js#L94

像这样:

var process_request_rule = [
  {
    "name": "rule-name",
    "condition": Meteor.bindEnvironment(function(R, session) {
      R.when(session.request.type == 'some-type');
     })
  }];