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
,这意味着我不能使用它的返回值。
为什么会这样?
答案 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中得出了工作结论。