|
jsmode "WebView2";
js {
debuginfo(2)
hidemaru.setTimeout(()=>{console.log("★");},0);
hidemaru.setTimeout(()=>{console.log("■");},2);
}
■が先に出力されてしまっています。
私のローカルのマシン(Ryzen 7700X)では、1つめが0ミリ秒、2つ目が16ミリ秒 くら
いまでの指定だと
順番が逆転してしまいます。
「本来は仮に両方0」「あるいは両方同じ値」だった場合でも「先に受け付けた方」
が先に実行されるのが正しいといえる挙動です。
そこの(=タイムが等しい時の順序の)実装が難しかったとしても、
後に受け付けたあげくに、引数のタイム指定が大きい方が、先に実行する、
という挙動はコントロール困難な挙動だと言えます。
hidemaru.*** ではなく、window.*** ならば、
// ---------------------------------------------
jsmode "WebView2";
js {
debuginfo(2)
window.setTimeout(()=>{console.log("★");},0);
window.setTimeout(()=>{console.log("■");},2);
}
// ---------------------------------------------
どころか、
// ---------------------------------------------
jsmode "WebView2";
js {
debuginfo(2)
window.setTimeout(()=>{console.log("★");},0);
window.setTimeout(()=>{console.log("■");},0);
}
// ---------------------------------------------
すらも原則順番が逆転することはありません。
// ---------------------------------------------
上の延長の話ですが、下も妙な順番になります。
jsmode "WebView2";
js {
debuginfo(2)
hidemaru.setTimeout(()=>{console.log("1");},100)
hidemaru.setTimeout(()=>{console.log("2");},100);
hidemaru.setTimeout(()=>{console.log("3");},200);
let a = hidemaru.setInterval(()=>{console.log("4");hidemaru.clearInterva
l(a)},200);
}
// ---------------------------------------------
// delayタイムが同じなら受け付けた順番通りになるべき
jsmode "WebView2";
js {
debuginfo(2)
window.setTimeout(()=>{console.log("1");},100)
window.setTimeout(()=>{console.log("2");},100);
window.setTimeout(()=>{console.log("3");},200);
let a = window.setInterval(()=>{console.log("4");window.clearInterval
(a)},200);
}
|
|