我在服务器上有这样的功能
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;
});
答案 0 :(得分:0)
基于评论和您的问题,我的猜测是您的return语句发生在HTTP请求的异步回调中。您可以使用Meteor.wrapAsync或Promises使这些请求同步并获得有效的返回语句。
答案 1 :(得分:0)
由于http的同步调用,问题正在发生。 你在这里真正发生的是不等待http呼叫响应。 你应该使用Meteor.wrapAsync;