Meteor “流星”随机出现;TypeError:无法读取属性';使无效';“未定义”的定义;

Meteor “流星”随机出现;TypeError:无法读取属性';使无效';“未定义”的定义;,meteor,Meteor,在看似随机的情况下,当我网站上的用户试图回答测验页面上的问题时,会出现以下错误: TypeError: Cannot read property 'invalidate' of undefined at Tracker.Dependency.changed (tracker.js:388) at ReactiveVar.set (reactive-var.js:82) at null. (builtins.js:22) at view.js:191 at Function.Template._w

在看似随机的情况下,当我网站上的用户试图回答测验页面上的问题时,会出现以下错误:

TypeError: Cannot read property 'invalidate' of undefined
at Tracker.Dependency.changed (tracker.js:388)
at ReactiveVar.set (reactive-var.js:82)
at null. (builtins.js:22)
at view.js:191
at Function.Template._withTemplateInstanceFunc (template.js:437)
at view.js:190
at Object.Blaze._withCurrentView (view.js:523)
at viewAutorun (view.js:189)
at Tracker.Computation._compute (tracker.js:294)
at Tracker.Computation._recompute (tracker.js:313)
我不确定为什么会发生这种情况,我也不完全确定这个错误是什么意思,如果有人能给我指出正确的方向,那就太好了


注意:此错误似乎仅在使用Chrome时发生。

如果没有更多信息,很难说,但我想看看这里,特别是“订阅不阻止”下的部分:

正如作者所说,“在meteor中,大多数“无法读取未定义属性”错误是由于对订阅数据存在的错误假设造成的。”


换句话说,您可能试图在订阅返回任何内容之前访问invalidate属性。

我冒昧猜测一下,这是中的罪犯代码

所以,问题是有什么东西正在修改
Object.prototype

例如

将打印:

has key= test isOwnProperty?= false
一个可能的尝试解决方案是将这个被剪断的部分添加到客户端,并查看它是否修复了问题(至少暂时):


然而,添加到
Object.prototype
是一种不好的做法,很多代码都会以意外的方式失败。您需要对此进行跟踪。

使用给定的堆栈跟踪来查找问题的根源。由于我们没有来自所有这些文件的src,因此我们无法提供太多帮助。
Object.prototype.test = function(){}
var emptyObj = {}; 
for (i in emptyObj) 
  console.log('has key=', i, 'isOwnProperty?=', emptyObj.hasOwnProperty(i))
has key= test isOwnProperty?= false
Tracker.Dependency.prototype.changed = function () {
  var self = this;
  for (var id in self._dependentsById){
    if (self._dependentsById.hasOwnProperty(id)){
      self._dependentsById[id].invalidate();
    }
  }
};
Tracker.Dependency.prototype.hasDependents = function () {
  var self = this;
  for(var id in self._dependentsById)
    if (self._dependentsById.hasOwnProperty(id))
      return true;
  return false;
};