A specified period of time that will be allowed to elapse in a system
before a specified event is to take place,unless another specified
event occurs first; in either case,the period is terminated when
either event takes place.
具体来说,我想要一个观察定时器,观察功能的执行时间,如果达到或超过指定时间,观察计时器将停止/通知执行功能.
任何帮助是极大的赞赏!非常感谢.
解决方法
与其他语言不同,Javascript是单线程的,这样一个函数执行一个定时器将永远不会执行(除了web工作人员,但是他们可以做的非常有限).定时器只能在功能完成执行时执行.因此,您甚至不能在同步功能和定时器之间共享进度变量,因此定时器无法“检查”功能的进度.
如果你的代码是完全独立的(没有访问任何你的全局变量,没有调用你的其他函数,并且没有访问DOM),那么你可以在一个网络工作者较新的浏览器),并在主线程中使用计时器.当web-worker代码完成时,它会向主线程发送一条消息,其结果是.当主线程接收到该消息时,它会停止定时器.如果定时器在接收结果之前触发,可能会杀死网络工作者.但是,您的代码不得不受到网络工作者的限制.
也可以使用异步操作(因为它们通过Javascript的单线程工作更好)这样做:
>启动异步操作,如ajax调用或加载映像.
>使用setTimeout()启动一个定时器,用于您的超时时间.
>如果定时器在异步操作完成之前触发,则停止异步操作(使用API取消它).
>如果异步操作在定时器触发之前完成,则使用clearTimeout()取消定时器并继续.
例如,以下是如何在加载映像时放置超时:
function loadImage(url,maxTime,data,fnSuccess,fnFail) { var img = new Image(); var timer = setTimeout(function() { timer = null; fnFail(data,url); },maxTime); img.onLoad = function() { if (timer) { clearTimeout(timer); fnSuccess(data,img); } } img.onAbort = img.onError = function() { clearTimeout(timer); fnFail(data,url); } img.src = url; }