打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
setTimeout和setInterval调用函数时失效的一个可能原因

setTimeout() 和setInterval() 是javascript中实现循环调用的两个重要方法:

(1) var timeoutID = setTimeout(excute.time);

这个函数的基本功能是设定在一段时间之后执行一段语句或者一个函数;

主要有两个参数:

excute 是需要在一段时间之后执行的js语句或者一个已定义的js函数function;

time 是设定的间隔时间,单位为ms;

返回值:

timeoutID 是返回的代指这个timeout计时器的id值,借用该id值可以使用clearTImeout()停用这个timeout

经常用到的一种使用setTimeout()的方式如下:

function cycle(){

// the funtion body

timeId = setTimeout('cycle()', 1000);

}

timeId = setTimeout('cycle()', 1000);

通过这种方式可以实现每过1000ms(=1s),执行依稀cycle函数的函数体部分

举个简单的例子,可以实现计数或者计时。

(2)var ID = setInterval(execute,time);

这个函数的基本功能是设定每过一段时间执行一次一段语句或者一个js函数;直到页面关闭或者使用clearInterval(ID)停止;

主要有两个参数:

excute 是需要周期执行的js语句或者一个已定义的js函数function;

time 是设定的周期间隔时间,单位为ms;

返回值:

ID 是返回的代指这个interval计时器的id值,借用该id值可以使用clearInterval()停用该interval

同样是最近在使用setTimeout() 函数的时候出现了一些问题

问题:使用setTimeout(func, time);之后并没有实现对应的功能

代码:

function send_video() {

var blob = send_blob;

if(!blob) return;

size = blob.size;

startIndex = 0;

plus = 10000;

console.debug('one chunk size: <', plus,="" '="">');

function inner_streamer() {

reader = new window.FileReader();

reader.onload = function (e) {

var send_data = new window.Uint8Array(e.target.result);

myconn.send({type:'video_seg',content:send_data});

startIndex += plus;

if (startIndex <=>

{

setTimeout('inner_streamer()',100);

}

else {

myconn.send({type:'video_com',content:'end'});

}

};

reader.readAsArrayBuffer(blob.slice(startIndex, startIndex + plus));

}

console.debug('begin to transfer data!');

inner_streamer();

}

原因: setTimeout()和setInterval()两个函数都有一个共同的特点:如果其执行的是一个js函数,该函数应是一个全局函数,而不能是某一函数内部的函数

解决方式:将内部的inner_streamer()提到send_video()函数的外面,同时使用全局变量来传递一些参数

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
js setTimeout和setInterval的使用
javascript测试题总结
JavaScript入门-函数function(二)
详解JS中定时器setInterval和setTImeout的this指向问题
细说JavaScript单线程的一些事 – 码农网
js定时器优化
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服