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

时间:2018-03-18 14:12:48

标签: javascript asynchronous

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

  1. 如果变量设置为true,则进程将运行异步检查
  2. 如果为true,则异步进程将停止
  3. 当变量设置为false时,异步过程将重新开始。
  4. 什么是最好的方法?可以访问两个函数(异步和UI)还是通过回调的全局变量?

2 个答案:

答案 0 :(得分:2)

不使用任何外部库等,一种简单的方法是使用某种形式的封装来返回一个停止方法。

这是一个简单的例子。



contenteditable="false"

function doAsyncStuff() {
  var i = setInterval(function () {
    console.log("tick");
  }, 1000);
  return function stop() {
    console.log("Stop called");
    clearInterval(i);
  }
}


var stop = doAsyncStuff();


document.querySelector("button").onclick = stop;




你甚至可以扩展它以返回多个功能,如恢复重启等。

答案 1 :(得分:1)

使用事件的东西可以正常工作。



function main() {
  main.running = true
  doSomething()
}
function doSomething() {
	if (!input.checked) {
		console.log("checking")
		window.setTimeout(doSomething,1000);
	}
  else {
    main.running = false;
  }
  
}
function changeHandler(event) {
  if (event.target.checked == false && main.running == false) {
    main();
  }
}
var input = document.getElementById('check');
input.onchange=changeHandler;
main.running = false;

<input id="check" type="checkbox">
&#13;
&#13;
&#13;