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("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;
                    }
                });
            }
        })
    });
}

最佳答案

你需要将预览函数转换为同步函数,这样使用Future,这会让这个函数等待正常的err,数据回调变成同步函数。

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
        }
    });
};

关于javascript - 如何在 Meteor 中将数据从服务器传递到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31830721/

相关文章:

javascript - 使用 Syn.js 的事件监听器未触发鼠标事件

没有持久性的 meteor 流数据 : Asking for best/right practise

javascript - 使用 Select2 和 Meteor.js 进行动态数据收集?

javascript - 尝试为收藏项目添加标签/主题标签

javascript - meteor 应用程序无故失败

javascript - Meteor #each 循环准备就绪

Javascript - 仅当 div 在 DOM 中可见时才播放音频

javascript - 使用 React 从 wordpress api 渲染预转义的 html

javascript - 单击 SVG 后如何与另一个 SVG 交互

javascript - 媒体源 api 源缓冲区追加不起作用