【问题标题】:Meteor/Fibers - How to use Meteor.call callback?Meteor/Fibers - 如何使用 Meteor.call 回调?
【发布时间】:2015-10-08 19:23:10
【问题描述】:

我有这段代码,我从客户端调用 Meteor 方法并期望回调中的结果。 results 对象是一个格式良好的对象,我可以从服务器控制台对其进行字符串化和打印。

当我运行此代码时,如果结果有效且没有错误,则不会在客户端上调用回调。但是,如果我将fut.return(results) 替换为fut.return(JSON.parse(JSON.stringify(results))),则会调用回调并在客户端中获得“字符串”。知道为什么我可以返回一个字符串但没有对象吗?

服务器代码(Meteor.Methods()):

getUserEvents : function(userId,start,end) {
        var fut = new Future();
        getUserEventsPrivate(userId,start,end,function(err,results){
            if(err){
                fut.throw(new Meteor.Error( 500, 'Oops, something wrong happened'));
            }else{
                fut.return(results); // works when fut.return(JSON.parse(JSON.stringify(results)));
            }
        });
        return fut.wait();
    }

客户:

Meteor.call('getUserEvents',Meteor.user()._id, startStr, endStr,function(err,results){
    console.log(results);
});

编辑 这是我试图作为“结果”传递的 Json:

[
  {
    "title": "ResponsiveMTL #1",
    "start": "2015-10-13T21:30:00.000Z",
    "end": "2015-10-14T00:30:00.000Z"
  },
  {
    "title": "Meteor Global Distributed Hackathon",
    "start": "2015-10-10T15:00:00.000Z",
    "end": "2015-10-11T15:00:00.000Z"
  },
  {
    "title": "retenues a la source",
    "start": "2015-10-08T19:25:00.275Z",
    "end": "2015-10-08T19:25:00.275Z"
  },
  {
    "title": "Salsa",
    "start": "2015-09-19T22:00:00.000Z",
    "end": "2015-09-19T23:00:00.000Z"
  },
  {
    "title": "Salsa",
    "start": "2015-10-09T22:00:00.000Z",
    "end": "2015-10-09T23:00:00.000Z"
  }
]

【问题讨论】:

  • 尝试将return fut.wait()更改为fut.wait(); return fut.value;
  • 当然result 而不是results 只是一个错字,对吧?
  • @apendua 当然 :)
  • 能否也比较一下parse/stringify技巧前后服务器上的results对象?
  • 您能否添加一个results 的示例或阐明它的外观?服务器控制台中是否有任何错误或指示?

标签: serialization meteor fiber


【解决方案1】:

完全可以通过这种方式返回一个对象。

您的对象可能不是开箱即用的 EJSON 序列化对象,尽管如果不实际查看它的样本就很难判断。

例如,如果您的对象包含循环引用,则 EJSON 将静默失败,并且不会调用您的回调。这种情况不太可能发生,因为您可以让 JSON 对其进行序列化。

您可以尝试查找有问题的属性并对其进行修改,但最好将其注册为使用 EJSON 的自定义类型。

http://docs.meteor.com/#/full/ejson_add_type

无论如何,看看你的实际对象并能够说出更多信息会很有趣。
你用的是什么版本的 Meteor?

【讨论】:

  • 我将尝试传递的 JSON 添加到问题中
  • @NathanZ,在聊天中查看我的 cmets。希望我们能解决这个问题。有趣的测试用例。
猜你喜欢
  • 2013-03-15
  • 2013-09-09
  • 2013-11-28
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
  • 2016-06-07
相关资源
最近更新 更多