1

哇哦,我还有更多流星问题!我要做的是从 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由于某种原因返回,这意味着我不能使用它的返回值。

为什么会这样?

4

2 回答 2

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 将重新运行代码。

于 2013-01-02T12:34:48.920 回答
0

经过与 Meteor 的 IRC 频道上的人的大量工作和讨论,我们终于得出了这个要点中的工作结论。

于 2013-01-05T02:39:35.393 回答