@wywm@z[y[W
ŏIXVF2024N1229
@JavaScriptœ̕@l܂B̃EFuTCgPromiseIuWFNg𗘗p@ЉĂ̂łAPromiseIuWFNgƂĂ킯łȂAsetTimeout\bhgȂ̂ŁAȂAPromiseIuWFNgg킸setTimeout\bhƃCxĝ݂œƂ邱Ƃl܂B
@ȉ̗ł́AȂ蒷Ԃv鏈1ƁA1̌ʂē삷ׂ2ƁA2̌ʂē삷ׂ3Ƃ܂B
1̏Ԃ́AtimeLimit(~b)ƂϐŎw肵܂B1̌ʂ҂ׂ2łȀ̓sA2000~boƁAJnĂ܂Ƃ܂B3A3200~boƁAJnĂ܂Ƃ܂B
@ŏ́ÂȂꍇŁA͐Ƃ͌܂A2Ԗڂ͓Ƃ莸sȂ悤ɂȂĂ܂B1ɗv鎞ԂA2JnɊԂɍtimeLimit = 1000̏ꍇƁA2JnɊԂɍȂtimeLimit = 3000̏ꍇłǂȂ邩lĂ݂܂B̃Ñ\[XER[h̒̈ȉtimeLimitlςĎsĂ݂ĂB
<script>
var timeLimit = 1000; // ƂȂꍇɁA1000ƖȂA3000ƏsɂȂ
var checkTablet = false;
var completed = false;
var done2 = false;
var timer1, timer2, timer3, timer4, timer5, timer6, timer7;
window.onload = func0;
// ̂Ȃꍇ
function func0() {
timer1 = setTimeout(func1, timeLimit);
timer2 = setTimeout(func2, 2000);
timer3 = setTimeout(func3, 3200);
comment("1Jn");
}
@̂ȂꍇAfunc0ɂāA1̏Ifunc1()N܂ł̎ԁA2̊Jnfunc2()N܂ł̎ԁA3̊Jnfunc3()N܂ł̎ԂƂ邽߂setTimeout\bhgL̎ԂmۂAu1Jnvƕ\܂B
function func1() {
comment("1I");
checkTablet = true;
}
function func2() {
if (checkTablet) {
completed = true;
checkTablet = false;
comment("2s");
}
else {
comment("2s");
}
}
@func1()ł́Au1Iv\AcheckTablettOtrueɂ܂Bfunc2()ł́A1̊`FbN邽߂ɁAcheckTablettO`FbN܂B1checkTablettOtruełA2ɐi݁AcompletedtOtrueɂāu2svƕ\܂B1Ă炸checkTablettOfalsełꍇ́A2słȂ̂ŁAu2svƕ\܂BcompletedtOfalsê܂܂łB
function func3() {
if (completed) {
comment("3s");
completed = false;
comment("ɏI");
}
else {
comment("3s");
}
clearTimeout(timer1);
clearTimeout(timer2);
clearTimeout(timer3);
comment("1bҋ@đ2Xe[W")
timer4 = setTimeout(func10, 1000);
}
@func3()ł́A2̊`FbN邽߂ɁAcompletedtO`FbN܂BcompletedtOtruełAu3svƕ\A3sőSĂ̏̂ŁAuɏIvƕ\܂B2sĂ炸completedtOfalsȅꍇɂ́A3sƂłȂ̂Łu3svƕ\܂B
@LŁAtimeLimit = 1000Ƃē삳ƁA1ɏ2JnA2ɏ3n܂̂ŁA3܂œ슮AuEUʂɈȉ̂悤ɕ\܂B
JavaScript̃eXg܂B
1Jn
1I
2s
3s
ɏI
@ƂĂȂ̂ŁALŁAtimeLimit = 3000 (1̓쎞Ԃ)Ƃē삳ƁA1ĂȂ̂ɏ2n܂Ă܂A2C3ɎsāAuEUʂɁAȉ̂悤ɕ\܂B
JavaScript̃eXg܂B
1Jn
2s
1I
3s
@̌A2Xe[Wɐiނ̂ŁAu1bҋ@đ2Xe[Wցvƕ\AsetTimeout\bh𗘗pāAƂꍇfunc10()ɐi݂܂BtimeLimit̒ĺAȂꍇƓłB
// LCxgœꍇ
function func10() {
checkTablet = false;
completed = false;
timer5 = setTimeout(func11, timeLimit); // func11̎sԁFtimeLimit msec
timer6 = setTimeout(func12, 2000); // 2000msecł́A1ĂȂ
comment("1Jn");
window.onload = func12;
}
@func10()ł́A1̊ƂȂfunc11()N܂ł̎ԂƁA2̊JnƂȂfunc12()܂ł̎Ԃmۂ邽߂ɁAsetTimeout\bhg܂Bu1Jnvƕ\Awindow.onloadvpeBfunc12ݒ肵܂BŁA'load'Cxgfunc12()N܂B
function func11() { // 1̊
checkTablet = true;
comment("1");
var ev1 = new Event('load');
window.dispatchEvent(ev1);
}
@1func11()ł́A1߂ɁAcheckTablettOtrueƂAu1vƕ\AɁAEventIuWFNg̃RXgN^g'load'Cxgev1AdispatchEvent\bh(EventTargetIuWFNg̃\bhłAwindowCdocumentCelementEventTargetIuWFNgƌ邱Ƃł܂)ɂA'load'Cxg܂B
function func12() {
if (checkTablet) {
checkTablet = false;
if (done2) {
comment("2͊ɊĂ̂ŏȂ");
}
else {
comment("2Jn");
timer7 = setTimeout(func122, 500); // func12̎sԁF500msec
window.onload = func13;
}
done2 = false;
}
else {
comment("2s");
}
}
@2̊Jnłfunc12()ł́A1`FbN邽߂checkTablettOׁAꂪtrueȂu2Jnvƕ\āA2̏I܂ł̎500~bsetTimeout\bh𗘗pĊmۂA2̊łfunc122()N悤ɂĂ܂B܂Awindow.onloadvpeBfunc13ݒ肵܂BŁA'load'Cxgfunc13()N܂BcheckTablettOfalsêƂ́u2svƕ\܂B
@AAł́AsetTimeoutĂꍇƁA'load'CxgĂꍇA1ĂȂɌĂꂽꍇɂ́Au2svƕ\܂B܂Aɏ2Ă̂ɁAfunc12()Ă邱Ƃ蓾̂ŁAdɏ2Ȃ悤ɁAxA2done2tOtrueɂāAdone2tOtruȅꍇɂ́Axڂ̏2NȂ悤ɂĂ܂B
function func122() { // 2
completed = true;
done2 = true;
comment("2");
var ev2 = new Event('load');
window.dispatchEvent(ev2);
}
function func13() {
if (completed) {
comment("3s");
}
else {
comment("3s");
throw new Error("s");
}
completed = false;
clearTimeout(timer4);
clearTimeout(timer5);
clearTimeout(timer6);
clearTimeout(timer7);
comment("ɏI");
throw new Error("r~");
}
@2̊łfunc122()ł́AcompletedtOtrueCdone2tOtrueɂāu2vƕ\܂B܂AłAdispatchEvent\bhɂA'load'CxgA3func13()N܂Bfunc13()NƂɂ́A2͊ĂAcompletedtO͕KtrueŁu3svƕ\܂Bfunc13()ɗ̂́A2func122()̒Ŕ'load'Cxgɂėꍇ݂̂ŁA3s邱Ƃ͂Ȃ̂łAs̏ꍇz肵Ă܂B
@timeLimit = 1000Ƃē삳ꍇAȂꍇł܂A2Xe[WłAʂɈȉ̂悤ɕ\Đ܂B
1Jn
1
2Jn
2
3s
ɏI
@timeLimit = 3000Ƃē삹ꍇA1Oɏ2n܂Ă܂̂ŁAȂꍇɂ͎sĂ܂܂Aꍇɂ́Ax2sĂA1ŃCxgď2ċN̂ŏ2A3āAȀ͐ɏIAȉ̂悤ɉʂɕ\܂B
1Jn
2s
1
2Jn
2
3s
ɏI
@ƂȂꍇɂ͎s\ĂAƂA1C2C3̈Ȁ́AK܂B
@XNvg͂ŏIŁǍɁA
</style>
t܂B
ȏJavaScriptvÓABGoogle Chromeŕ\āA[F12]L[āA\[XNbNĂ݂ĂB\ɎgĂcomment()́AHTML\[XER[hĂ(JavaScript̃foOQ)B
yLz@LłB̊F܂̂x肽A낵肢܂B
yLz@L͂܂łłB