为什么在客户端中为Meteor.call()返回未定义的内容?

时间:2015-07-27 22:30:08

标签: javascript twitter meteor

所以我试图访问twitter REST API并检索推文的屏幕名称。我觉得我的代码会更好解释:

我从isClient()调用方法'screenName':

  'click button': function () {
    Meteor.call('screenName',
      function(error,result) {
        if (error) {
          console.log(error);
        }
        else {
          window.alert(result);
        }
      }
    )
  }

由于某种原因,该方法在实际登录控制台上的twitter帐户的屏幕名称时返回undefined。

Meteor.methods({
  'screenName': function() {
      T.get('search/tweets',
      {
        q:'#UCLA',
        count:1
      },
      function(err,data,response) {
        console.log(data.statuses[0].user.screen_name);
        return data.statuses[0].user.screen_name;
      }
    )
  }

如果有人可以帮我解决这个问题。非常感谢你!

2 个答案:

答案 0 :(得分:1)

您的服务器方法需要同步。方法中的回调在>方法返回undefined后返回。我想更具体,但我不确定您使用的是哪个库。

通过查看HTTP.call文档中的示例,您可以了解这一点。您的代码可能如下所示:

Tget = Meteor.wrapAsync(T.get);

Meteor.methods({
  'screenName': function() {
    try {
      var result = Tget('search/tweets', {q:'#UCLA', count:1});
      return result.statuses[0].user.screen_name;
    } catch (e) {
      return false;
    }
  }
});

有关wrapAsync的详细信息,请参阅the docs

答案 1 :(得分:0)

您只从内部函数返回data.statuses[0].user.screen_name。您需要从screenName方法返回,才能在Meteor.call()中将其保留。