Javascript Meteor中如何将数据从服务器传递到客户端
我正在学习Meteor和Javascript。我使用一个npm包来获取服务器端url的元数据。这个很好用。但当我将结果传递回客户机时,我得到了未定义的结果。如果你能帮忙,我将不胜感激 这是我的密码Javascript Meteor中如何将数据从服务器传递到客户端,javascript,meteor,Javascript,Meteor,我正在学习Meteor和Javascript。我使用一个npm包来获取服务器端url的元数据。这个很好用。但当我将结果传递回客户机时,我得到了未定义的结果。如果你能帮忙,我将不胜感激 这是我的密码 if (Meteor.isClient) { Meteor.call('getMetaData', "http://www.bbc.co.uk/news", function (err, data) { if (err) { console.log("e
if (Meteor.isClient) {
Meteor.call('getMetaData', "http://www.bbc.co.uk/news", function (err, data) {
if (err) {
console.log("error", err);
};
console.log("Meta data: " + data); //shows undefined
});
}
if (Meteor.isServer) {
Meteor.startup(function () {
var preview = Meteor.npmRequire('page-previewer');
Meteor.methods({
getMetaData: function (url) {
preview(url, function (err, data) {
if (!err) {
console.log(data); //Works fine
return data;
}
});
}
})
});
}
尝试使用
else
块获取元数据。这里有一个类似问题的解决方案。
所以基本上你只需要增加一行
else{ console.log('metadata '+ data);}
您需要将预览函数转换为同步函数,像这样使用Future,这将使此函数等待正常错误,数据回调转换为同步函数
var Future = Npm.require('fibers/future'),
preview = Meteor.npmRequire('page-previewer');
Meteor.methods({
getMetaData: function(url) {
var f = new Future();
preview(url, function(err, data) {
if (!err) {
return f.return(data);
}
});
return f.wait();
}
});
现在这个片段应该可以工作了
if (Meteor.isClient) {
Meteor.call('getMetaData', "http://www.bbc.co.uk/news", function (err, data) {
if (err) {
console.log("error", err);
}else{
console.log("Meta data: " + data); //shows undefined
}
});
};
可能无法解决问题,但我建议将服务器方法移出启动块,并在methodPerfect中调用npm require。按预期工作。我不知道为什么它在通过不传递callback
Meteor.call('getMetaData')使其同步时不起作用http://www.bbc.co.uk/news");代码>如Meteor.call文档所述。有没有办法使它异步?