javascript - 可暂停的 Javascript 函数

标签 javascript

我正在浏览器中训练神经网络。我正在考虑调用一个可以运行较长时间(过夜)的函数,并且我希望能够以非致命的方式终止函数执行(这样我就不会丢失我的数据)快乐。

我正在寻找一个通用的解决方案,它允许任何循环函数从控制台或 ui 元素以其当前状态终止,并进行最小的更改。

我看过 this question但是我的有点不同;现在是 2016 年,我们有网络 worker 和帖子消息,他们似乎会提供解决方案的工具。

最佳答案

好吧...如果你使用递归,那么暂停就可以了。但遗憾的是我不推荐它,因为调用堆栈大小会导致迭代次数 > 13000 的错误。

为了证明这种可能性,我必须在下一次迭代之前包含一个 setTimeout,因为否则对于 10000 操作太快而无法在其间暂停:

var pause = false;
var pause_iteration;
function recursiveLoop(iteration, maximum) {
    if (iteration === maximum) {
        console.log("Loop finished!");
    } else if (pause) {
        console.log("Loop paused at: " + iteration);
        pause_iteration = iteration;
    } else {
        var M = Math.sqrt(Math.random());
        setTimeout(function () {
            recursiveLoop((iteration + 1), maximum)
        }, 100);
    }
}
recursiveLoop(0, 10000);
// set pause = true at a later point
pause = true;

关于javascript - 可暂停的 Javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39898773/

相关文章:

javascript - 创建一个函数,创建 "*"的 x 行和 y 列

asp.net - 绕过输入的 onClick 事件的 ASP.NET 验证

javascript - 在 Phonegap 中以编程方式加载 Admob 插页式广告

javascript - 这个函数的调用是如何进行的呢?

javascript - 使用 jQuery 加载页面时显示隐藏的 div 标签

javascript - 将变量传递给 slider() 中的 value 属性

javascript - 替换或删除完整字符串中包含单词中@temp之前的字符

javascript - ajax 中的 Cross Origin 不适用于 IOS (10.3.1) 中的 .properties 文件

javascript - 基于For循环迭代的数组拼接

javascript - 为什么这个 jquery 函数没有被调用