【问题标题】:updating 2 objects with each other as subobjects - Maximum call stack size exceeded将 2 个对象作为子对象相互更新 - 超出最大调用堆栈大小
【发布时间】:2014-10-09 19:45:12
【问题描述】:

我有两个对象,childPost 和 parentPost。我想将 childPost 作为 Subelement 存储到 parentPost,反之亦然,但无论我尝试什么,我总是遇到:

RangeError: Maximum call stack size exceeded

stackoverflow 上已经有很多关于这个主题的主题,但似乎没有一个与我遇到的确切问题有关。

我的代码(省略了错误处理等不必要的代码):

async.parallel([
  function () {
      originalPost.subPosts.push(post);
      originalPost.save(function (err) {
      });
  },
  function () {
      post.originalPost.push(originalPost);
      post.save(function (err, post) {
      });
  }
], sendResponse(res, 201, post));

我在上述解决方案之外尝试了什么:

  • 没有async lib的相同代码
  • setImmediate(), nextTick(), setTimeout()
  • 省略了post.originalPost.push(originalPost); - 这可行,但它不会将子元素保存在我的子帖子中

我使用:

  • node.js v0.11.14-pre
  • 猫鼬
  • 快递
  • mongodb v2.4.9

编辑:我的数据模型:

var postSchema = new mongoose.Schema({
    sharedPosts: [subPostSchema],
    originalPost: [subPostSchema],
    // ...-
});

我的subPostSchema 看起来就像我的postSchema(不幸的是,我无法在没有错误的情况下执行sharedPosts: [postSchema] -> 所以我复制了我的架构。对我来说似乎是错误的,但这是我能得到的唯一方法它到目前为止工作)

【问题讨论】:

  • 这个错误大概是因为代码序列化了结构,不知道如何处理循环关系。你是如何序列化数据的?
  • 相关,这可能是也可能不是它的副本:stackoverflow.com/questions/21413864/…
  • 感谢您的帖子,但我认为这不完全是我的问题 - 如果我是对的 ;) - 因为我没有对另一个对象的引用,但将完整的帖子添加为 sharedPostoriginalPost 到当前帖子对象
  • 你肯定有同样的问题(循环引用)。您必须在应用层中对其进行分类,使用某种间接引用(ID 或类似的),而不是对象引用。
  • 感谢您的帮助!现在我明白了为什么我有这个问题。从我的subPostSchema 中删除sharedPosts: [subPostSchema]originalPost: [subPostSchema] 工作

标签: javascript node.js mongodb express mongoose


【解决方案1】:

我的解决方案:查看我帖子中的 cmets 一般:我无法将 originalPost 添加到我的 sharedPost 中,其中包含 originalPost -> 无限循环。防止循环工作

【讨论】:

    猜你喜欢
    • 2013-09-26
    • 2021-11-28
    • 2017-12-02
    • 2017-11-12
    • 1970-01-01
    • 2018-11-20
    • 2018-01-24
    • 2015-10-24
    • 2015-12-29
    相关资源
    最近更新 更多