$ firebaseUtils.toJSON throw超出了最大调用堆栈大小

时间:2017-01-30 01:23:30

标签: firebase angularfire

我正在使用toJSON函数扩展一个非常基本的$ firebaseObject,它看起来完全像:

toJSON: function() {
  var data = $firebaseUtils.toJSON(this);
  return data;
}

我在gist of Katowulf后面对自己,但我一直收到这个错误:

RangeError: Maximum call stack size exceeded
    at Object.isObject (angular.js:590)
    at Object.toJSON (angularfire.min.js:1)
    at a.toJSON (tournament.js:375)
    at Object.toJSON (angularfire.min.js:1)
    at a.toJSON (tournament.js:375)
    at Object.toJSON (angularfire.min.js:1)
    at a.toJSON (tournament.js:375)
    at Object.toJSON (angularfire.min.js:1)
    at a.toJSON (tournament.js:375)
    at Object.toJSON (angularfire.min.js:1)

当我深入研究一下时,使用console.trace(),它表明我的toJSON函数一次又一次地调用自身,这会产生无限循环。

它始于:

toJSON  @   tournament.js:375
toJSON  @   angularfire.min.js:1
...

继续下去:

toJSON  @   tournament.js:375
toJSON  @   angularfire.min.js:1
toJSON  @   tournament.js:376
toJSON  @   angularfire.min.js:1
...

最多:

toJSON  @   tournament.js:375
toJSON  @   angularfire.min.js:1
toJSON  @   tournament.js:376
toJSON  @   angularfire.min.js:1
toJSON  @   tournament.js:376
toJSON  @   angularfire.min.js:1
toJSON  @   tournament.js:376
toJSON  @   angularfire.min.js:1
toJSON  @   tournament.js:376
toJSON  @   angularfire.min.js:1
toJSON  @   tournament.js:376
toJSON  @   angularfire.min.js:1
toJSON  @   tournament.js:376
toJSON  @   angularfire.min.js:1
toJSON  @   tournament.js:376
toJSON  @   angularfire.min.js:1
...

当删除toJSON时它工作正常,但我真的需要做一些工作才能保存到firebase。

编辑:仔细研究一下$ firebaseUtils.toJSON()源代码之后,我明白为什么我会在这里得到一个无限循环,但我想知道kato的版本是如何工作的?

0 个答案:

没有答案