Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor中如何将数据从服务器传递到客户端_Javascript_Meteor - Fatal编程技术网

Javascript Meteor中如何将数据从服务器传递到客户端

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

我正在学习Meteor和Javascript。我使用一个npm包来获取服务器端url的元数据。这个很好用。但当我将结果传递回客户机时,我得到了未定义的结果。如果你能帮忙,我将不胜感激

这是我的密码

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文档所述。有没有办法使它异步?