2016-10-06 9 views
1

私はブラウザでニューラルネットワークをトレーニングしています。私は、長期間(一晩)実行できる関数を呼び出すことを検討しています。そして、致命的でない方法で関数の実行を終了することができます(データを失うことはありません)。ハッピー。一時停止可能なJavaScript関数

私は、ループ機能が最小限の変更でコンソールまたはui要素から現在の状態で終了することを可能にする一般的な解決策を探しています。

私はthis questionを見ましたが、私のものは少し異なります。今は2016年です。ウェブワーカーとメッセージを投稿しています。これは、ソリューションのためのツールを提供するようです。

+1

ES6ジェネレータやES7非同期は – SLaks

+1

参考になります、あなたが試した何のために任意のコードを持っていますか? – jordaniac89

+1

ブラウザデバッガの[ソース]タブで一時停止ボタンを押すと、実行を一時停止できます。 – Sharun

答えて

3

まあ...再帰を使用すると、一時停止が機能します。しかし、悲しいことに、コールスタックサイズが13000を超える反復でエラーにつながるため、悲しいことに私はそれをお勧めできません。

可能性を実証するために、次の反復の前にsetTimeoutを含める必要がありました。間でそれを一時停止するにはあまりにも速いです:

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; 
+0

それはあなたが意味するものです。この例をありがとう、それは10000回未満の反復を望む人に役立つかもしれません。 – Josiah

関連する問題