我正在构建连接到Twitter API的流星应用程序,到目前为止我还没有运气。 我正在使用twit程序包在服务器端进行调用,它会将数据记录到服务器控制台,但是当客户端控制台进行记录时,就没有数据了。
客户端不会抛出错误,它会在else语句中为result参数运行console.log,但是它是作为undefined传入的。 好像结果回调在数据返回之前就已经运行了,但是我对Meteor.call方法的理解是,它应该等到它从服务器收到回声后再运行。
我在这里做错了什么?
if (Meteor.isClient) {
Template.hello.greeting = function () {
return "Welcome to testing.";
};
Template.hello.recentFollows = function () {
return Session.get("recentFollows");
};
Template.hello.events({
'click #fetchButton': function () {
console.log("Recent tweets from stream!");
userName = "josiahgoff";
Meteor.call('getBananaTweets', function(err, result) {
if(err) {
console.log("error occurred on receiving data on server. ", err);
} else {
console.log("result: ", result);
Session.set("recentFollows", result);
}
});
}
});
}
if (Meteor.isServer) {
Meteor.startup(function () {
Twit = new TwitMaker({
consumer_key: '******',
consumer_secret: '******',
access_token: '******',
access_token_secret: '******'
});
});
Meteor.methods({
getBananaTweets: function () {
Twit.get('search/tweets', { q: 'banana since:2011-11-11', count: 1 }, function(err, result) {
if (err) {
console.log("Error", err);
return err;
} else {
console.log(result);
return result;
}
});
}
});
}
您正在服务器代码中不能使用return
的地方使用它:在异步回调中。 Twit.get
调用立即返回,函数结束(没有返回值)。 因此客户什么也收不到。 一段时间后, Twit.get
回来了,但是在那种情况下return
就没有了。
这是一个很常见的问题。 解决方案是将Twit.get
调用包装成某种形状或形式的光纤,以使其同步。 例如,请参见以下答案: Iron Router服务器端路由回调不起作用