在客户端上从Meteor.call获取未定义,但在服务器变量上包含数据

时间:2016-02-22 11:14:26

标签: javascript http meteor

我在服务器上有这样的功能

Meteor.methods({
"functionName": function(data) {
//calculations, http requests etc.

console.log(variable); //shows variable properly
return variable;
}
});

当我在服务器上console.log(variable)时,我可以看到数据。

现在我在客户端做Meteor.call

Meteor.call('functionName', data, function(err, res) {
console.log(res); //shows undefined
});

这里有什么问题?为什么我不能在客户端上使用响应变量?

编辑:

我一直在努力解决这个问题几个小时,我将错误缩小到一个HTTP.get()函数。现在它看起来像这样:

//some calculations
var variable = HTTP.get('url');
return variable.data; //should return an object

我试图用Promise包装它然后它没有用。它看起来像这样:

//some calculations
function promise() {
  var variable = HTTP.get('url');
  resolve('Done.');
}

promise().then(function() {
  console.log(variable); //doesn't even work on server this way
  return variable;
});

2 个答案:

答案 0 :(得分:0)

基于评论和您的问题,我的猜测是您的return语句发生在HTTP请求的异步回调中。您可以使用Meteor.wrapAsyncPromises使这些请求同步并获得有效的返回语句。

答案 1 :(得分:0)

由于http的同步调用,问题正在发生。 你在这里真正发生的是不等待http呼叫响应。 你应该使用Meteor.wrapAsync;