Meteorjs - Meteor.call(' myMethod')返回三个对象而不是一个数组?

时间:2016-11-06 12:53:46

标签: javascript meteor

我有一个有这个帮手的客户:

Template.eventTemplate.helpers({
    returnUsersEvents: function(){
        Meteor.call("events.getByUserId", function(error, result){
        if(error){
            console.log("error" + error.reason);
            return;
        }
        console.log(result);
        return result; 
        });

    }
});

收集方法

Meteor.methods({
  'events.insert'(Event) {
    Events.insert(Event);
  },
  'events.getByUserId'(){
    var events =  Events.find({UserId: Meteor.userId()}).fetch();
    console.log(events);
    return events;
  }
})

我的收藏中有一个对象。但我检索了三个相同类型的对象。谁能告诉我我做错了什么?

这是我的模板

<ul class="demo-list-item mdl-list">
    {{#each returnUsersEvents}}
    <li class="mdl-list__item">
        <span class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect">
            <i class="material-icons mdl-list__item-icon">map</i>
            <a class="" href="/event/{{_id}}">{{EventName}}</a>
        </span>
    </li>
    {{/each}}
</ul>

1 个答案:

答案 0 :(得分:3)

您的问题是您的returnUsersEvents()助手根本没有返回任何内容。您在Meteor.call()的回调中有一个返回语句。这将成为.call()本身的返回值。

Meteor.call()是异步的,这意味着.call()将在回调中的结果可用之前返回。为了使这个工作,你需要帮助器从回调到达时返回结果,这是在帮助者第一次返回后的某个时间点。

Meteor中实现此目的的典型模式是使用帮助程序正在跟踪的ReactiveVar,并从回调内部设置ReactiveVar。

Here是一个SO答案,展示了如何做到这一点。

在服务器上:你需要获取。否则,您将返回一个数据库游标,该游标不是可序列化的对象(这意味着它无法通过DDP返回,即Meteor服务器将结果发送给客户端的协议)