回调不能自我重复功能

时间:2017-06-25 10:11:27

标签: javascript

目前我正在编写一个用户脚本,旨在将预告片视频插入网页。在脚本中我写了一个函数来过滤视频的真实来源,因为url有几种格式,但函数内的回调不起作用。

function test_url(preview,list,callback) {
if (list.length) {
    preview.src = list[0][0];
}
preview.onerror = function() {
    if (list.length) {
        test_url(preview,list);   // the function will be re-executed until the passed list is empty
    }
    else {
        console.log('No more url available!');
        if (callback && typeof(callback) === "function") { callback(); }
        else {console.log('callback is : '+ typeof callback);}
        return;
    }
};
if (!list[0].length) {
    list.splice(0,1);
}
else {
    list[0].shift();
}}

test_url(Preview,URLs,function() {console.log('This is a callback.')})

上面的回调不起作用,它会显示callback is undefined

传入的列表就像

[
    ['www.example1.com','www.example2.com'],
    ['www.example3.com','www.example4.com'],
    ['www.example5.com','www.example6.com']
]

我真的不知道问题在哪里,因为我仍然是JavaScript的新手。任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您需要传递回执才能执行。

当您以递归方式调用test_url时,您将缺少将回调方法作为最后一个参数传递给它。所以当最后你的列表变空时,那时你没有定义回调方法。

检查下面的代码,我添加了回调执行

function test_url(preview,list,callback) {
if (list.length) {
    preview.src = list[0][0];
}
preview.onerror = function() {
    if (list.length) {
        test_url(preview,list, callback); // pass the callback
    }
    else {
        console.log('No more url available!');
        if (callback && typeof(callback) === "function") { callback(); }
        else {console.log('callback is : '+ typeof callback);}
        return;
    }
};
if (!list[0].length) {
    list.splice(0,1);
}
else {
    list[0].shift();
}
}

test_url(Preview,URLs,function() {console.log('This is a callback.')})