流星JS - 客户端集合似乎是空的

问题描述:

自从我使用Meteor或涉猎UI世界以来,这已经很长时间了,所以如果这是一个糟糕的问题,请原谅我。流星JS - 客户端集合似乎是空的

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.C所有()进入客户端启动功能

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

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

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

+0

我嗅到计时问题。在你最后的代码示例中,'console.log()'在Meteor.call()后执行* immediate *。这意味着它在函数(error,result){}'回调甚至会运行很久之前就会执行。尝试将日志记录移入回调。 – Tomalak

+0

感谢您的建议。它看起来像是一个计时问题,所以我尝试将Meteor.call()移动到onCreated事件中,但仍然没有运气。我也尝试订阅和其他的东西,但仍然没有喜悦。 – Exie

+0

你是否在服务器上有Meteor.publish()'你的两个集合? –

您可以将回调结果的值保存到会话变量或无功变量中,然后再进行检索。

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 
} 
} 
+0

经过一番周折后,这现在很好,干净!非常感谢。 – Exie