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

标签 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>

最佳答案

您的问题是您的 returnUsersEvents() 帮助程序根本不返回任何内容。 Meteor.call() 的回调内部有一个 return 语句。这将不会成为.call()本身的返回值。

Meteor.call() 是异步的,这意味着 .call() 将在回调内的结果可用之前返回。要实现此功能,您需要帮助程序在回调到达时返回结果,即在帮助程序第一次返回后的某个时间点。

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

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

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

关于javascript - Meteorjs - Meteor.call ('myMethod' )返回三个对象而不是一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40449570/

相关文章:

javascript - 为 JavaScript 中的文件上传生成 HTTP 多部分正文

javascript - 订阅 React-meteor-data

javascript - 查询N天后创建的数据,无需额外包

swift - Cordova 插件初始化

javascript - 删除项目时,如何处理 ul > li 项目未按预期排列

javascript - 将鼠标悬停在图像上时,如何显示带有 x-y 坐标的十字线光标?

javascript - 单击节点时打开分支?

javascript - 如何实现 TinyMCE 表格拖动句柄?

angularjs - Meteor-Angular 教程 : bad formatting in HTML template, 用于复制/粘贴代码

javascript - 将对象与 Canvas 的曲线对齐