Meteor.JS从Google API问题中检索

时间:2013-01-02 04:46:57

标签: javascript api youtube meteor

哇哇,更多流星问我!我要做的是从YouTube Data API v3中检索用户的频道“代码段”。它包含一个对象,其中包含一个名为items的数组,其中包含我的应用程序中所需的所有数据。我当前的客户代码如下:

if (Meteor.user() && !Meteor.loggingIn()) {
    Meteor.http.get("https://www.googleapis.com/youtube/v3/channels?part=snippet&mine=true&access_token=" + Meteor.user().services.google.accessToken, function (err, result) {
        console.log(result.statusCode, result.data);
        var retdata =  result.data;
        return retdata.items;
    });
}

在客户端控制台中输出:

200 
Object {kind: "youtube#channelListResponse", etag: ""eTr3dHIt5_K9qdGtRKL-5XdpiQI/4Lt-RSCeBy7D3VwX3c_uic6-LIM"", pageInfo: Object, items: Array[1]}

但是函数由于某种原因返回undefined,这意味着我不能使用它的返回值。

为什么会这样?

2 个答案:

答案 0 :(得分:3)

那是因为你将返回数据的方法作为第二个参数传递给http.get作为异步回调,一旦从你调用的地址返回数据就会调用它。所以:

Meteor.http.get(url, callback);

不会返回任何内容。相反,不是在回调中返回一个对象,而是将其设置在get之外的范围内,而不是:

if (Meteor.user() && !Meteor.loggingIn()) {
    var url = "https://www.googleapis.com/youtube/v3/channels";
    var params = {
      access_token: Meteor.user().services.google.accessToken,
      part: "snippet",
      mine: "true"
    };
    Meteor.http.get(url, {params: params}, function (err, result) {
        console.log(result.statusCode, result.data);
        var retdata =  result.data;
        Session.set("myItems", retdata.items);
    });
}

确保您还手动发布services.google.accessToken字段,或者在Meteor.user()上不可用。并确保你在模板或某个反应中做所有这些,如果Meteor.user()尚未可用,Meteor将重新运行代码。

答案 1 :(得分:0)

在与Meteor的IRC频道上的人们进行了大量的工作和讨论之后,我们终于在gist中得出了工作结论。