我第一次使用 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,我什么也得不到。
我非常感谢对此的任何帮助。
您应该使用同步版本HTTP.post http://docs.meteor.com/#/full/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(...)
因此客户端可以将错误视为其第一个回调参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)