Web ページに送信しているビット マスク値を変換し、それを使用して、配置されているセンサーの場所と数をユーザーに表示する関数を作成しました。これは非常に基本的なもので、数値を取得し、ビットごとの数学を使用して a1
がどこにあるかを確認し、その位置番号を配列から文字列に格納して返されます。
しかし、値を指定するとエラーが発生します。
bit
>= 30 かつTEMPmax
= 9
これらの値を使用すると、次のようになります。
Max execution steps exceeded (200) | Exception of type 'Jint.Native.JsException' was thrown.
しかし、TEMPmax = 5
and bit
= 30 に変更すると、エラーは発生しません。これを一時的な修正として使用していますが、コードからわかるように、最大 8 つの異なる位置を持つことができます。
私が理解していないのは、実行ステップを超えた理由です。for()
ループは9回しか発生しておらず、ループ内のものもありif
、おそらく他のことが起こっていると思います(教えてください)。
質問:
- 最大実行ステップ数を超えるのはなぜですか?
- どうすればこれを修正したり、効率的にしたりできますか?
- コード内で発生する実行ステップの数を確認するにはどうすればよいですか?
これは私が書いたコードです(自明です):
var all = ["pos1", "pos2", "pos3", "pos4", "pos5", "pos6", "pos7", "pos8"]; //temp sensors possible
var TEMPmax = 9;
var text = ""; //value to return
var bit = fields.get('TotalTempsensors', 0); // none
if(bit > 1){
for(var i = 0; i < TEMPmax; i++){
if((bit & (1 << i))){
text += all[i - 1];
text += ",";
}
}
}
else{
text = "ERROR";
}
return text;