Meteors集合游标forEach无法正常工作

sta*_*qmi 7 collections foreach cursor meteor

为什么Meteor集合游标foreach循环在下面的代码中不起作用.如果我将循环包装在Template.messages.rendered或Deps.autorun函数中,它就可以工作.我不明白为什么.

Messages = new Meteor.Collection("messages");

processed_data = [];

if(Meteor.isClient) {

    data = Messages.find({}, { sort: { time: 1 }});
    data.forEach(function(row) {
        console.log(row.name)
        processed_data.push(row.name);
    });
}
Run Code Online (Sandbox Code Playgroud)

Jos*_*mar 11

代码运行时,消息收集尚未就绪.

尝试这样的事情:

Messages = new Meteor.Collection("messages");

if(Meteor.isClient) {
    processed_data = []; 

    Deps.autorun(function (c) {
        console.log('run');
        var cursor = Messages.find({}, { sort: { time: 1 }});
        if (!cursor.count()) return;

        cursor.forEach(function (row) {
            console.log(row.name);
            processed_data.push(row.name);
        }); 

        c.stop();
    }); 
}
Run Code Online (Sandbox Code Playgroud)

其他方案:

只需玩订阅!您可以将onReady回调传递给订阅 http://docs.meteor.com/#meteor_subscribe

  • Collection正在加载异步.这意味着它正在踢消息加载过程,然后通常继续使用代码.然后,您尝试访问尚未在异步过程中加载的集合.这意味着它尚未准备好. (3认同)