Я исправил ваш код и убедился, что он работает с API YouTube.
Сначала создайте асинхронную функцию, заменив:
service.channels.list({
part: 'contentDetails',
id: inputs.ytbIdChannel,
key: youtubeApiKey,
})
.then(res => {
на:
service.channels.list({
part: 'contentDetails',
id: inputs.ytbIdChannel,
key: youtubeApiKey,
})
.then(async res => {
Затем для исправления необходимо заменить содержимое блока if (res.data.items[0].contentDetails.relatedPlaylists.uploads)
следующим кодом:
let uploadsId = channels.data.items[0].contentDetails.relatedPlaylists.uploads;
// With the uploadID, get all uploaded videos
let videos = await service.playlistItems.list({
part: 'snippet',
playlistId: uploadsId,
maxResults: '12',
key: youtubeApiKey,
})
this.youtbeVideos = videos.data.items;
// For each videos in list, inject the statistics object and return all videos
for (let video of this.youtbeVideos) {
let videoId = video.snippet.resourceId.videoId
let stats = await service.videos.list({
part: 'statistics',
id: videoId,
key: youtubeApiKey,
})
Object.assign(video, stats.data.items[0].statistics)
}
return exits.success(
this.youtbeVideos
);
Два ключевых изменения, которые я сделал:
- Использование ожидает , так что итерация по
this.youtbeVideos
приостанавливает получение статистики, которую нужно извлечь, прежде чем перейти на - Перемещение возврата и вызов
exits.success
вне l oop чтобы он возвращал данные один раз после добавления всей статистики
Вы можете запустить мою рабочую копию здесь - просто добавьте свой ключ API для YouTube.
Когда список вернется, он будет содержать всю статистику, как и ожидалось.