目前我正在编写一个用户脚本,旨在将预告片视频插入网页。在脚本中我写了一个函数来过滤视频的真实来源,因为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的新手。任何建议都将不胜感激。
答案 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.')})