Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中停止异步进程的最佳方法_Javascript_Asynchronous - Fatal编程技术网

在Javascript中停止异步进程的最佳方法

在Javascript中停止异步进程的最佳方法,javascript,asynchronous,Javascript,Asynchronous,我需要在javascript中实现一个函数,以下一种方式运行异步进程: 如果变量设置为true,则进程将运行异步检查 如果为true,则异步进程将停止 当变量设置为false时,异步进程将再次启动 最好的办法是什么?一个全局变量,可用于两个函数(异步和UI)或通过回调访问?无需使用任何外部lib等,一种简单的方法是使用某种形式的封装,返回一个stop方法 下面是一个简单的例子 函数doAsyncStuff(){ 变量i=设置间隔(函数(){ 控制台日志(“勾选”); }, 1000); 返回函

我需要在javascript中实现一个函数,以下一种方式运行异步进程:


  • 如果变量设置为true,则进程将运行异步检查
  • 如果为true,则异步进程将停止
  • 当变量设置为false时,异步进程将再次启动

  • 最好的办法是什么?一个全局变量,可用于两个函数(异步和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的变量