Javascript で「サスペンドできる」ものを作成するには、通常のプログラムとは少し異なる方法で作成する必要があります。
ステップ 1より適切な言葉がないため、1 回のパス
で
どれだけの問題を実行できるかを決定します。
ステップ 2
状態をある種のオブジェクトに保存します。中間値はありません。次のパスを作成するために必要なものだけです
ステップ 3
関数
で実行できるようにコードを記述しwindow.setTimeout()
ます。これにより、ページをリロードするよりもテストがはるかに簡単になります。
この場合、名前全体を 1 ステップずつ小文字に変換するプログラムがあります。保存する必要がある唯一のデータは、自分の名前と、現在の計算に沿った場所のインデックスです。
例 1: 用途setTimeout()
<html>
<head>
<title>Test Thingy</title>
</head>
<body>
<script>
var data = {
name: ["Jeremy", "J", "Starcher"],
idx: 0
}
function doPass() {
// If at the end of the list
if (data.idx >= data.name.length) {
alert("All iterations done:" + data.name.join(" "));
return;
}
// Do our calculation here
var s = data.name[data.idx];
s = s.toLowerCase();
data.name[data.idx] = s;
data.idx++;
window.setTimeout(doPass);
}
doPass();
</script>
</body>
</html>
例 2: localStorage を使用します。「リロード」を 4 回押してテストします
<html>
<head>
<title>Test Thingy</title>
</head>
<body>
<script>
var data;
data = localStorage.getItem("data");
if (data) {
data = JSON.parse(data);
} else {
data = {
name: ["Jeremy", "J", "Starcher"],
idx: 0
}
}
function doPass() {
// If at the end of the list
if (data.idx >= data.name.length) {
alert("All iterations done:" + data.name.join(" "));
return;
}
// Do our calculation here
var s = data.name[data.idx];
alert(s);
s = s.toLowerCase();
data.name[data.idx] = s;
data.idx++;
localStorage.setItem("data", JSON.stringify(data));
}
doPass();
</script>
</body>
</html>