我真的在与流星回调斗争。我有一个客户端调用服务器端方法,但当回调从服务器返回时,我得到一个未定义的结果。据我所知,这是因为服务器没有完成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';
}
});
}
});
我可能会做一些非常愚蠢的事情,或者它可能比我预期的更复杂,但任何帮助都会有很长的路要走!
答案 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 }
});
}
});