【发布时间】:2016-05-30 11:01:23
【问题描述】:
我绝对看不到这一点,所以我正在寻找一个快速的手。我一直在谷歌上搜索,但没有发现多少有帮助的东西。
设置场景:
我有一个使用“googleapis”包的节点应用程序。现在,我可以正常工作并(大部分)按预期返回数据。
当我必须单独调用以获取每个视频的持续时间时,问题就出现了(获取该数据位的唯一方法是单独调用)。
我似乎无法将持续时间值向上传递。我知道我做的不对,需要做一些不同的事情,但我只是看不到这里的树木。
youtubeClient.search.list({ part: 'id,snippet', maxResults: 10, q: searchTerm, type: 'video' },
function (err, data) {
if (err) {
console.error('Error: ' + err);
}
if (data) {
var returnList = [];
for (var item in data.items) {
var duration = '00:00'; // THIS IS THE VARIABLE I WANT POPULATED
var value = data.items[item].id.videoId;
youtubeClient.videos.list({ part: 'contentDetails', id: data.items[item].id.videoId },
function (err, details) {
if (err) {
console.error('Error: ' + err);
}
if (details) {
// THIS IS WHERE I AM TRYING TO SET THE DURATION FIELD FROM THE RESULT
duration = details.items[0].contentDetails.duration;
}
});
returnList.push({value: value, duration: duration});
}
res.json(returnList);
}
});
如您所见,我想要实现的目标一点也不难,因此我们将不胜感激。谢谢。
【问题讨论】:
-
这是一个经典的循环内的异步操作问题。甚至在第一个异步操作完成并调用它的回调之前,循环就会运行到完成,从而打乱了所有事情的时间。建议您进行一些搜索以更多地了解您的代码为什么不起作用。不幸的是,我认为没有一个很好的规范答案可以作为所有这些类型问题的参考。
-
我感觉 jfriend00 正是如此。太可惜了,我会再看一看
标签: javascript node.js callback asynccallback google-api-nodejs-client