Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法将多个视频插入播放列表-YouTube API v3_Javascript_Youtube Api_Youtube Data Api_Youtube Javascript Api - Fatal编程技术网

Javascript 无法将多个视频插入播放列表-YouTube API v3

Javascript 无法将多个视频插入播放列表-YouTube API v3,javascript,youtube-api,youtube-data-api,youtube-javascript-api,Javascript,Youtube Api,Youtube Data Api,Youtube Javascript Api,我试图将多个视频添加到播放列表中,但仅将一个视频添加到播放列表中。我可以成功创建播放列表并将视频插入播放列表,但无法将多个视频插入播放列表 var playlistId 下面是一个简单的方法,我这样做。函数addTheVideoStopLaylist()就是我失败的地方。还显示createPlaylist()和addToPlaylist() 有一个全局播放ID来跟踪创建的播放列表 var playlistId 我创建了如下播放列表: function createPlaylist() {

我试图将多个视频添加到播放列表中,但仅将一个视频添加到播放列表中。我可以成功创建播放列表并将视频插入播放列表,但无法将多个视频插入播放列表

var playlistId
下面是一个简单的方法,我这样做。函数addTheVideoStopLaylist()就是我失败的地方。还显示createPlaylist()和addToPlaylist()

有一个全局播放ID来跟踪创建的播放列表

var playlistId
我创建了如下播放列表:

function createPlaylist() {
    var request = gapi.client.youtube.playlists.insert({
        part: 'snippet,status',
        resource: {
            snippet: {
                title: 'hard coded title',
                description: 'Hard Coded Description'
            },
            status: {
                privacyStatus: 'private'
            }
        }
    });

    request.execute(function(response) {
        var result = response.result;
        if (result) {
            playlistId = result.id;
            console.log("created playlist " + playlistId)
        }
    });
}
我在创建的播放列表中添加了一个视频,并指定了一个有效的视频id,如下所示:

function addToPlaylist(id, startPos, endPos) {
    console.log("In addToPlaylist with " + id  +
                "sending to playlist : " + playlistId);

    var details = {
        videoId: id,
        kind: 'youtube#video'
    }

    var request = gapi.client.youtube.playlistItems.insert({
        part: 'snippet',
        resource: {
            snippet: {
                playlistId: playlistId,
                resourceId: details
            }
        }
    }).execute();
}
上述两个功能相当标准,工作正常。但是,在AddTheVideoStopLaylist()中将多个视频添加到如下播放列表时,我遇到了问题。我有一个有效的视频id数组,对于每个id,我都会将其添加到创建的播放列表中。问题是并非所有视频都添加到播放列表中,只添加了一个视频

function addTheseVideosToPlaylist() {
    var links = [
        "wtLJPvx7-ys",
        "K3meJyiYWFw",
        "3TtVsy98ces"
    ]
    for(i = 0; i < links.length; i++)
        addToPlaylist(links[i]);
}
函数addTheVideoStopLaylist(){
变量链接=[
“wtLJPvx7 ys”,
“K3meJyiYWFw”,
“3TtVsy98ces”
]
对于(i=0;i
总而言之,我成功地创建了播放列表并将视频添加到播放列表中,但当我尝试通过添加阵列中的每个链接将多个视频插入到播放列表中时,播放列表仅包含一个视频


如何解决此问题?

一种解决方案是为播放列表中的每次插入添加延迟。但我不完全确定为什么需要延期

我也在使用
setTimeout()的自定义循环

使用延迟的示例实现:

// Global array holds links and a global counter variable
var links = [
  "wtLJPvx7-ys",
  "K3meJyiYWFw",
  "3TtVsy98ces"
]
var counter = 0;

function addVideosToPlaylist() {
    myLoop(links[0]);
}


function myLoop() {
    addToPlaylist(video_id);
    setTimeout(function() {
        counter++;
        if (counter < links.length)
            myLoop(links[counter]);
    }, 3000);
}
//全局数组包含链接和全局计数器变量
变量链接=[
“wtLJPvx7 ys”,
“K3meJyiYWFw”,
“3TtVsy98ces”
]
var计数器=0;
函数addVideosToPlaylist(){
myLoop(links[0]);
}
函数myLoop(){
addToPlaylist(视频\u id);
setTimeout(函数(){
计数器++;
if(计数器
除了Rohan的答案,底部的函数调用应该是:

function myLoop(video_id) {
    addToPlaylist(video_id);
    setTimeout(function() {
        counter++;
        if(counter < links.length)
            myLoop(links[counter]);
    }, 3000);
}
函数myLoop(视频\u id){
addToPlaylist(视频\u id);
setTimeout(函数(){
计数器++;
if(计数器
它缺少“video_id”作为参数

这对我有好处

整个工作代码是:

// Global array holds links and a global counter variable
var links = [
  "wtLJPvx7-ys",
  "K3meJyiYWFw",
  "3TtVsy98ces"
]
var counter = 0;

function addVideosToPlaylist() {
    myLoop(links[0]);
}

function myLoop(video_id) {
    addToPlaylist(video_id);
    setTimeout(function() {
        counter++;
        if(counter < links.length)
            myLoop(links[counter]);
    }, 3000);
}
//全局数组包含链接和全局计数器变量
变量链接=[
“wtLJPvx7 ys”,
“K3meJyiYWFw”,
“3TtVsy98ces”
]
var计数器=0;
函数addVideosToPlaylist(){
myLoop(links[0]);
}
函数myLoop(视频\u id){
addToPlaylist(视频\u id);
setTimeout(函数(){
计数器++;
if(计数器
我想我现在明白了为什么需要增加延迟。在发送下一个插入请求之前,需要延迟每个插入请求

我的解决方案是递归。只有当我收到请求的响应时,我才会发送下一个请求,直到数组结束:

function addVideoToPlayList(pId, videosIdArray, index)
{
    var vId = videosIdArray[index];
    var details = {
        videoId: vId,
        kind: 'youtube#video'
    }

    var request = gapi.client.youtube.playlistItems.insert({
        part: 'snippet',
        resource: {
            snippet: {
                playlistId: pId,
                resourceId: details
            }
        }
    });

    request.execute(function(response) {
        console.log(response);

        if(videosIdArray.length == index+1)
        {
            // End!
        }
        else{
            addVideoToPlayList(pId,videosIdArray,++index);
        }

        $('#status').html(
            $('#status').html() + '<pre>' +
            JSON.stringify(response.result) + '</pre><br/>');
    });
}

这是一个更好的解决方案,因为所需的延迟可能取决于连接速度。此外,如果延迟不足,视频最终会被添加多次或跳过