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

meteorjs get data returned from server callback

在 meteor 中,我试图通过从客户端创建 Meteor.call 来插入新文档。一切正常,除了我想 return 创建文档的 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",但我应该在客户端的“response”值上得到相同的值,但我总是未定义。

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

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

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

Meteor.methods 不等你回电。试试这个:

在服务器上:

Meteor.methods({

  'scenarioCreate': function(scenarioObj) {

    var newId =  Scenarios.insert(scenarioObj);

    return newId;

  }

});

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

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