【问题标题】:Meteor JS - Client Collection seems to be emptyMeteor JS - 客户端集合似乎是空的
【发布时间】:2016-08-25 07:23:10
【问题描述】:

我已经很长时间没有使用 Meteor 或涉足 UI 世界了,如果这是一个糟糕的问题,请原谅我。

api/main.js:

export const Nodes = new Meteor.Collection("nodes");
export const Links = new Meteor.Collection("links");

服务器/main.js

import { Links, Nodes } from '../api/main.js';

Meteor.startup(() => {
  // code to run on server at startup
}

Meteor.methods({
  traverseDocument: function traverseDocument(documentKey) {
    // ... do stuff ...
    Links.insert( data.links );
    Nodes.insert( data.nodes );
    return data;
  }
}

客户端/main.js

import { Links, Nodes } from '../api/main.js';
import './main.html';

Meteor.startup(function () {
  // Fetch data via a call
  Meteor.call("traverseDocument", 'NTD000000228506', function (error, results) {});
});

Template.viz.rendered = function () {
  console.log(Nodes.find());                 // <-- LocalConnection.Cursor()
  console.log(Nodes.find().fetch());         // <-- This is empty []
  console.log(Nodes._collection._docs._map); // <-- This returns Object{}
}

我试过了: 1. 发布/订阅 2.我尝试了一个辅助功能 3. 我已经把 Meteor.Call() 移到了客户端启动函数中

所以现在这似乎更接近工作了。

原来的问题现在变成了 - 为什么 find().fetch() 返回一个空数组?

也许我应该发布一个新问题并将其标记为已解决?

【问题讨论】:

  • 我闻到了时间问题。在上一个代码示例中,console.log()Meteor.call() 之后立即 执行。这意味着它在function (error, results) {} 回调甚至运行之前很久就执行了。尝试将日志记录移动到回调中。
  • 感谢您的建议。这似乎是一个时间问题,所以我尝试将 Meteor.call() 移动到 onCreated 事件,但仍然没有运气。我也尝试过订阅和其他的东西,但仍然没有快乐。
  • Meteor.publish()你在服务器上的两个收藏了吗?
  • 我确实尝试过 Meteor.publish() 但它似乎没有用。我刚刚将 Meteor.call() 移动到客户端启动中,看起来 Nodes 集合现在已被填充。然而 fetch() 似乎很奇怪。 Nodes.find() 返回一个 LocalConnection.Cursor() 但是当我最后添加一个 .fetch() 时,我得到的只是一个空数组。 console.log(Nodes._collection._docs._map) 返回一个 Object{} 但感觉有点恶心。

标签: javascript node.js meteor


【解决方案1】:

您可以将回调结果的值保存到会话变量或反应变量,然后再检索。

import { Links, Nodes } from '../api/main.js';
import './main.html';

Template.viz.rendered = function () {
  Meteor.call("traverseDocument", 'VALUE001', function (error, results) {
    if(error) {
      // handle error
    }
    else {
     Session.set('result',results);  // save result in session or reactive       variable
    }
    console.log(Nodes);  // <-- This works, has data
  });

  if(Session.get('result') {
  console.log(Session.get('result')); // <-- Retrieve value from session or reactive var
 }
}

【讨论】:

  • 经过一番折腾,现在它工作得又好又干净!非常感谢。
猜你喜欢
  • 2016-04-15
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 2014-08-25
  • 2017-06-27
  • 2012-04-23
  • 1970-01-01
相关资源
最近更新 更多