在Javascript中停止异步进程的最佳方法
我需要在javascript中实现一个函数,以下一种方式运行异步进程:在Javascript中停止异步进程的最佳方法,javascript,asynchronous,Javascript,Asynchronous,我需要在javascript中实现一个函数,以下一种方式运行异步进程: 如果变量设置为true,则进程将运行异步检查 如果为true,则异步进程将停止 当变量设置为false时,异步进程将再次启动 最好的办法是什么?一个全局变量,可用于两个函数(异步和UI)或通过回调访问?无需使用任何外部lib等,一种简单的方法是使用某种形式的封装,返回一个stop方法 下面是一个简单的例子 函数doAsyncStuff(){ 变量i=设置间隔(函数(){ 控制台日志(“勾选”); }, 1000); 返回函
最好的办法是什么?一个全局变量,可用于两个函数(异步和UI)或通过回调访问?无需使用任何外部lib等,一种简单的方法是使用某种形式的封装,返回一个stop方法 下面是一个简单的例子
函数doAsyncStuff(){
变量i=设置间隔(函数(){
控制台日志(“勾选”);
}, 1000);
返回函数stop(){
console.log(“停止调用”);
间隔时间(i);
}
}
var-stop=doAsyncStuff();
document.querySelector(“按钮”).onclick=stop代码>
Stop
在不使用任何外部lib等的情况下,一种简单的方法是使用某种形式的封装返回Stop方法
下面是一个简单的例子
函数doAsyncStuff(){
变量i=设置间隔(函数(){
控制台日志(“勾选”);
}, 1000);
返回函数stop(){
console.log(“停止调用”);
间隔时间(i);
}
}
var-stop=doAsyncStuff();
document.querySelector(“按钮”).onclick=stop代码>
停止
使用事件的东西可以正常工作
函数main(){
main.running=true
doSomething()
}
函数doSomething(){
如果(!input.checked){
控制台日志(“检查”)
设置超时(doSomething,1000);
}
否则{
main.running=false;
}
}
函数changeHandler(事件){
if(event.target.checked==false&&main.running==false){
main();
}
}
var input=document.getElementById('check');
input.onchange=changeHandler;
main.running=false代码>
使用事件的东西可以正常工作
函数main(){
main.running=true
doSomething()
}
函数doSomething(){
如果(!input.checked){
控制台日志(“检查”)
设置超时(doSomething,1000);
}
否则{
main.running=false;
}
}
函数changeHandler(事件){
if(event.target.checked==false&&main.running==false){
main();
}
}
var input=document.getElementById('check');
input.onchange=changeHandler;
main.running=false代码>
“检查变量是否设置为true”最佳解决方案是使用事件管理器项目仅使用jquery。Node.js或angular不可用。什么样的异步进程?JS进程(除了像XHR这样的东西)通常不是异步的。“一个对两个函数都可访问的全局变量”它不必是全局的。它可以在包含需要访问它的函数的作用域的非全局作用域中声明。(我并不推荐这种方法。)“检查变量是否设置为true”最好的解决方案是使用event Emmiter项目只使用jquery。Node.js或angular不可用。什么样的异步进程?JS进程(除了像XHR这样的东西)通常不是异步的。“一个对两个函数都可访问的全局变量”它不必是全局的。它可以在包含需要访问它的函数的作用域的非全局作用域中声明。(我并不推荐这种方法。)Keith版本更好,因为stop在doAsyncStuff上有一个闭包,所以你们可以在stop函数中使用来自doAsyncStuff的变量Keith版本更好,因为stop在doAsyncStuff上有一个闭包,所以你们可以在stop函数中使用来自doAsyncStuff的变量