Javascript Meteor:在控制台(服务器)上可见,向客户端发送未定义的

Javascript Meteor:在控制台(服务器)上可见,向客户端发送未定义的,javascript,meteor,Javascript,Meteor,最后潜入流星。关于http get请求,我有一个小问题 在客户机上执行一个简单的调用以从服务器获取数据 if (Meteor.isClient) { Template.liveprice.helpers({ price: function() { Meteor.call('getPrice', function(error, response) { if (error) { return error;

最后潜入流星。关于http get请求,我有一个小问题

在客户机上执行一个简单的调用以从服务器获取数据

if (Meteor.isClient) {
Template.liveprice.helpers({
    price: function() {
        Meteor.call('getPrice', function(error, response) {
            if (error) {
                return error;
            } else {
                return response;
            }
        })
    }
})
}
在服务器上,从实时公共API检索数据。它在服务器上工作正常,但会将未定义的结果发送回客户端。我错过了什么

if (Meteor.isServer) {
Meteor.methods({
    getPrice: function() {
        var url = 'https://www.bitstamp.net/api/ticker/';
        var req = HTTP.call('GET',url,function(error, result) {
            //console.log(result);
            if (result.statusCode == 200) {
                var last = result.data.last;
                console.log(last);//this shows the desired result in the server's console
                return last;//sends back undefined to the client
            } else {
                return error;
            }
        });
    }
})
}

@埃帕斯卡雷罗是对的。幸运的是,Meteor的HTTP由于光纤也能同步工作。试试这个:

Meteor.methods({
    getPrice: function() {
        var url = 'https://www.bitstamp.net/api/ticker/';
        var result;

        try {
          result = HTTP.get(url);
          check(result.data.last, String);
          return result.data.last;
        } catch (error) {
          throw new Meteor.Error('get-price-failed', 'Could not retrieve the price.');
        }
    }
});

我不知道meteor,但对我来说,它看起来像是一个异步调用,你不能从异步调用返回。我看到你接受了我的答案,但我做了一些更改。值得注意的是,您应该抛出一个
Meteor.Error
,而不是返回一个错误对象。最重要的是,您应该验证从远程服务器接收的数据。@sbking,thx。有机会使http请求实时吗?Atm我看不到它在更新。@user3586358为此,您可能希望在方法之外执行HTTP请求,而不是在
Meteor.setInterval
中执行。然后每隔x秒用检索到的值更新数据库字段并发布它。