meteorjs获取从服务器回调返回的数据

时间:2015-06-28 16:02:41

标签: meteor callback

在meteor中尝试通过从客户端制作Meteor.call来插入新文档。一切正常,除了我想将创建文档的id返回给客户端,以便我可以重定向到正确的URL。

我有类似的东西(客户端):

Meteor.call('scenarioCreate', scenarioObj, function(err, response) {

    if(err) {
      console.warn(err);
      return;
    }

    console.info(response);
});

在服务器上:

Meteor.methods({

  'scenarioCreate': function(scenarioObj) {

    Scenarios.insert( scenarioObj, function(err, id) {

      console.info("new id: "+id);

      if (err) {
        console.warn(err);
        throw new Meteor.Error(404, 'Something went wrong');
      }

      return id;

    });
  }

});

从服务器端我得到控制台日志“new id:DDaq4aWsGf3fxG7RP”,但我应该在客户端上获得“响应”值的相同值,但我总是得到未定义。< / p>

任何人都可以向我解释为什么或我做错了什么。

2 个答案:

答案 0 :(得分:4)

Meteor.methods不会等待你的回调。试试这个:

在服务器上:

Meteor.methods({

  'scenarioCreate': function(scenarioObj) {

    var newId =  Scenarios.insert(scenarioObj);

    return newId;

  }

});

要捕获任何错误,请使用try/catch

注意:如果您仍想使用回调,请结帐fibers/future

答案 1 :(得分:1)

您的第一个错误是您在id的回调中返回insert。这没有任何作用。然后你的第二个不知道方法是同步执行的。这意味着您只能使用Meteor.wrapAsync使用回调中可用的信息。但这不仅仅是重点。 insert函数返回新的_id。意思是你可以这样做:

Meteor.methods({
  'scenarioCreate': function(scenarioObj) {
    return Scenarios.insert( scenarioObj );
  }
});