在多次激发时运行一次js函数
Run js function once when fired more than once
我有一个div,它使用jQuery加载带有javascript函数的文件/内容。。
function DoWork() {
// Do Stuff
}
假设用户可以使用相同的js函数DoWork()重新加载Div并提取相同的文件/内容。问题是,当重新加载文件时,上一个加载的函数DoWork()仍在运行。如何杀死之前启动的DoWork()并重新启动它?
Javascript是单线程的,这意味着在给定的时刻只能执行一件事。如果DoWork
已经在"运行",它要么是a)阻止所有其他JS代码,并且您别无选择,只能让它完成,因为在它自己完成之前,您无法执行任何中断代码,要么是b)DoWork
计划通过setTimeout()
或setInterval()
在一个间隔内启动。
如果是后一种情况,setTimeout()
和setInterval()
将返回一个ID。将该ID存储在某个位置,并根据启动方式调用clearTimeout(doWork_timeout_id)
或clearInterval(doWork_interval_id)
。
您可以构建一个使用:setTimeout的简单函数,然后每次对DoWork的调用都会首先调用:clearTimeout。我真的不喜欢这个解决方案,因为你会在setTimeout上浪费CPU。因此,另一种选择是在DoWork中使用web worker(如果你在另一个线程中运行大数据,它会为你做很多其他好事)-然后你可以选择每次启动DoWork()的工作时发送"停止"消息。
是否使用ajax加载div的内容?如果是这样,更好的方法如下:
var doWorkAjax=null;
function DoWork(){
if (doWorkAjax) doWorkAjax.abort();
doWorkAjax = $.ajax(url, data, function(result){
....
doWorkAjax=null;
});
}
相关文章:
- 根据Angular.JS上一次的内容禁用选择
- 更改路由后,运行一次js脚本
- 我可以使用JS一次使用JSON数组中的一个字符串吗
- mongoose.js Model.remove在循环中只能工作一次
- Angular.js指令格式化程序只调用过一次,或者如何告诉ngModel表现得像watchCollection
- data th JS每页只工作一次
- 如何每 10 秒调用一次 JS 函数,然后以角度激活一个函数
- 节点 js 在启动时调用函数一次
- 您可以在节点.js上一次运行多个应用程序吗?
- 只加载一次js函数
- 如何使网页一次只能访问一次?(JS+HTML)
- 如何在不刷新页面的情况下每 10 秒在本地重新加载一次 JS 文件
- 只运行一次js文件
- 在多次激发时运行一次js函数
- 如何为可以多次加载的ajax页面处理只加载一次js
- 如何只显示一次JS警报
- 每次访问只执行一次js函数,刷新时再次执行
- 如何使用cookie只执行一次JS脚本
- 调用一次js函数后页面将冻结
- 如何在Phonegap中只加载一次js库