javascript - 带有 HTTP 请求的 Meteor 方法不返回回调

标签 javascript meteor httprequest youtube-data-api

我正在尝试使用 HTTP get 请求创建一个 Meteor 方法。我正在返回结果,但我无法在客户端获得回调以返回结果。回调需要等待 HTTP 请求返回结果后才返回回调。我从 HTTP 请求中成功获取了数据,所以这不是问题所在。

关于如何让它工作有什么建议吗?

Meteor.methods({
   getYouTubeVideo: function (id) {
    check(id, String);

    var params = {
        part:'snippet, status, contentDetails',
        id:id,
        key:Meteor.settings.youtube.apiKey
    };

    HTTP.get('https://www.googleapis.com/youtube/v3/videos', {timeout:5000, params:params}, function(error, result){
      if (error) {
        throw new Meteor.Error(404, "Error: " + error);
        return;
      }
        console.log(result);
        return result; 
    });
  }
});

最佳答案

你需要使用HTTP.get的同步版本,就像这样:

var result=HTTP.get('https://www.googleapis.com/youtube/v3/videos', {timeout:5000, params:params});
return result;

如果您像以前一样使用带有回调的异步版本,您将面临一个常见问题,即必须尝试在回调中返回结果(这是行不通的)而不是在方法中,这正是您应该做的。

请注意,同步HTTP.get 仅在服务器环境中可用,因此请将您的方法声明放在server/

关于javascript - 带有 HTTP 请求的 Meteor 方法不返回回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25692923/

相关文章:

javascript - 运行 js discord bot 时出错

javascript - Angular $http 配置超时

json - 无法解码 HTTP 请求中的 JSON

javascript - 接受用户输入来创建唯一的对象

javascript - 当窗口失去焦点时 setTimeout 会发生什么?

Javascript图形布局算法

api - 为 HTTPClient get() 请求设置超时

javascript - 在 Meteor 中显示/隐藏模态

templates - meteor :检测嵌套模板中的事件

meteor 模板事件,如何获取导致事件的对象?