gpt4 book ai didi

javascript - YouTube API V3,多个 youtube.playlistItems.list 请求的顺序不同

转载 作者:太空宇宙 更新时间:2023-11-04 16:00:44 25 4
gpt4 key购买 nike

我正在使用 javascript youtube API v3 请求某些视频数据中的 3 个不同的播放列表。它工作成功,但方法 execute() 请求的视频数据不符合循环中调用的顺序(刷新 page )。代码很简单,可以调试here ,或者如果您愿意的话,可以在这里:

var playlistsID = [...]
for (var i = 0; i < playlistsID.length; i++) {
function playlistItem() {
var request = gapi.client.youtube.playlistItems.list({
part: 'snippet',
playlistId: playlistsID[i],
maxResults: 4
});

request.execute(function(response) {
if ('error' in response) {
console.log(response.error.message);
}
else {
for (var j = 0; j < response.items.length; j++) {
showVideo(response.items[j]);
}
}
});
}
}

function showVideo(response) {
var videoThumb = response.snippet.thumbnails.medium.url,
container = document.getElementById("video-container"),
videoDiv = document.createElement("div"),
image = document.createElement("img");
image.setAttribute("src", videoThumb);
container.appendChild(videoDiv);
videoDiv.appendChild(image);
}

我的理论是 execute() 方法正在异步请求信息,但如果这是正确的,我应该如何设置请求中的顺序?

最佳答案

您可以使用Javascript Promise等待执行异步请求并使用 Bluebird库以正确的顺序循环它们从此 post :

var promiseFor = Promise.method(function(condition, action, value) {
if (!condition(value)) return value;
return action(value).then(promiseFor.bind(null, condition, action));
});

//Load and grant access to youtube api
function googleApiKey() {

var apiKey = 'YOUR_API_KEY';
gapi.client.setApiKey(apiKey);
gapi.client.load('youtube', 'v3', function() {

promiseFor(function(count) {
return count < playlists.length;
}, function(count) {
return requestVideo(playlists[count])
.then(function(response) {

//show video
for (var j = 0; j < response.items.length; j++) {
showVideo(response.items[j]);
}

return ++count;
}, function(error) {
console.log(response.error.message);
});
}, 0).then(console.log.bind(console, 'all done'));
});
}

function requestVideo(playlist) {

return new Promise(function(resolve, reject) {

var request = gapi.client.youtube.playlistItems.list({
part: 'snippet',
playlistId: playlist,
maxResults: 4
});

request.execute(function(response) {

if ('error' in response) {
reject(Error(response.error.message));
}
else {
resolve(response);
}
});
});
}

别忘了添加bluebird link

你可以找到一个 fiddle here

关于javascript - YouTube API V3,多个 youtube.playlistItems.list 请求的顺序不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42305175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com