我第一次使用Meteor,我正在尝试在方法中进行简单的http调用,这样我就可以从客户端调用此方法。
问题是这个异步调用它会继续运行,即使我把它放在一个包装器中。
客户方:
Meteor.call('getToken', function(error, results) {
console.log('entered');
if(error) {
console.log(error);
} else {
console.log(results);
}
});
服务器端
Meteor.methods({
getToken: function(){
// App url
var appUrl = 'myAppUrl';
// Key credentials
var apiKey = 'mykey';
var apiSecret = 'mySecret';
function asyncCall(){
Meteor.http.call(
'POST',
appUrl,
{
data: {
key: apiKey,
secret: apiSecret
}
}, function (err, res) {
if(err){
return err;
} else {
return res;
}
}
);
}
var syncCall = Meteor.wrapAsync(asyncCall);
// now you can return the result to client.
return syncCall;
}
});
我总是得到一个不明确的回报。 如果我在http.post调用中记录响应,我正在做出正确的响应。 如果我尝试记录syncCall,我什么也得不到。
我非常感谢你提供任何帮助。
答案 0 :(得分:3)
在这种情况下,您应该使用HTTP.post的同步版本。尝试这样的东西:
Meteor.methods({
getToken: function() {
var appUrl = 'myAppUrl';
var data = {apiKey: 'mykey', apiSecret: 'mySecret'};
try {
var result = HTTP.post(appUrl, {data: data});
return result;
} catch (err) {
return err;
}
}
});
而不是返回err
我建议确定抛出了什么类型的错误,然后只是throw new Meteor.Error(...)
,以便客户端可以将错误视为其第一个回调参数。