Meteor方法调用 - 等待方法完成

时间:2016-09-23 16:27:43

标签: javascript node.js meteor

我真的在与流星回调斗争。我有一个客户端调用服务器端方法,但当回调从服务器返回时,我得到一个未定义的结果。据我所知,这是因为服务器没有完成POST,但已经发送了回调。我是Meteor的新手,这看起来真的很难。到目前为止我所拥有的:

客户端:

Meteor.call("createCustomer", city, fname, lname, email, function(error, result) {
  if (error) {
    console.log("error: " + error);
  } else {
    console.log("result: " + result)
  }
});

服务器:

Meteor.methods({
  'createCustomer': function(city, fname, lname, email) {
    HTTP.call("POST", url+'/customer?api_key='+process.env.API_TOKEN ,{
      data: {
        city: city,
        first_name: fnam,
        last_name: lname,
        email: email
      }
    }, function (error, result) {
      if (error) {
        return 'error';
      } else {
        return'success';
      }
    });
  }
});

我可能会做一些非常愚蠢的事情,或者它可能比我预期的更复杂,但任何帮助都会有很长的路要走!

2 个答案:

答案 0 :(得分:2)

这是Meteor.wrapAsync的用途。它创建异步函数的同步版本。试试这个:

'createCustomer': function(city, fname, lname, email) {
  var call = Meteor.wrapAsync(HTTP.call, HTTP);
  return call("POST", url+'/customer?api_key='+process.env.API_TOKEN ,{
    data: {
      city: city,
      first_name: fname,
      last_name: lname,
      email: email
    }
  });
}

答案 1 :(得分:0)

扩展我原来的评论。

在服务器上如果您没有通过回调,HTTP.call会同步运行,而无需使用Meteor.wrapAsync

Meteor.methods({
  createCustomer(city, first_name, last_name, email) {
    return HTTP.post(`${url}/customer?api_key=${process.env.API_TOKEN}`, {
      data: { city, first_name, last_name, email }
    });
  }
});