ÙØ£Ùت ØªÙØªØ¨ Ø§ÙØ´ÙÙØ±Ø©Ø ستÙÙÙ ÙÙ ÙÙØ³Ù Â«Ø£Ø±ÙØ¯ تشغÙÙ ÙØ°Ù Ø§ÙØ¯Ø§ÙØ© بعد ÙÙÙÙ ÙÙÙØ³ Ø§ÙØ¢Ù Ø§ÙØ¢Ù. ÙØ°Ø§ ٠ا ÙØ³Ù ÙÙÙ âØ¨Ø¬Ø¯ÙÙØ© Ø§ÙØ§Ø³ØªØ¯Ø¹Ø§Ø¡Ø§Øªâ (scheduling a call).
Ø¥ÙÙÙ Ø¯Ø§ÙØªÙÙ Ø§Ø«ÙØªÙÙ ÙÙØ°Ù Ø§ÙØ¬Ø¯ÙÙØ©:
- ÙØªÙØ ÙÙ â
setTimeoutâ ØªØ´ØºÙÙ Ø§ÙØ¯Ø§ÙØ© Ù Ø±ÙØ© ÙØ§ØØ¯Ø© بعد ÙØªØ±Ø© Ù Ù Ø§ÙØ²Ù Ù. - ÙØªÙØ ÙÙ â
setIntervalâ ØªØ´ØºÙÙ Ø§ÙØ¯Ø§ÙØ© ØªÙØ±Ø§Ø±ÙÙØ§ ÙØ¨Ø¯Ø£ ذÙ٠بعد ÙØªØ±Ø© Ù Ù Ø§ÙØ²Ù Ù ÙÙØªÙØ±ÙØ± ÙÙÙ ÙØªØ±Ø© ØØ³Ø¨ تÙ٠اÙÙØªØ±Ø© Ø§ÙØªÙ ØØ¯ÙØ¯ØªÙØ§.
صØÙØ Ø£ÙÙ ÙØ§ØªÙÙ Ø§ÙØ¯Ø§ÙتÙÙ ÙÙØ³ØªØ§ ÙÙ Ù ÙØ§ØµÙØ© ÙØºØ© Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت Ø¥ÙÙØ§ Ø£ÙÙ Ø£ØºÙØ¨ Ø§ÙØ¨Ùئات ÙÙÙØ§ Ù ÙØ¬Ø¯ÙÙ٠داخÙÙ ÙÙØ¯ÙÙ Ù٠ا ÙÙØ§. ÙÙÙØ¯ÙÙØ©Ø ÙÙÙ٠اÙ٠تصÙÙØØ§Øª Ù٠ا ÙNode.js تدع٠Ù٠ا.
setTimeout
ØµÙØ§ØºØ© Ø§ÙØ´ÙÙØ±Ø©:
let timerId = setTimeout(func|code, [delay], [arg1], [arg2], ...)
اÙÙ ØªØºÙØ±Ø§Øª:
func|code- ٠ا ÙØ¬Ø¨ تÙÙÙØ°Ù Ø£ÙØ§Ù Ø¯Ø§ÙØ© Ø£Ù Ø³ÙØ³ÙØ© ÙØµÙØ© ÙÙÙØ§ Ø´ÙÙØ±Ø©. عادةÙ, ÙÙ Ø¯Ø§ÙØ© ÙÙÙÙ ÙØ¹Ø§Ø¯Ø© Ø§ÙØ£Ø³Ø¨Ø§Ø¨ Ø§ÙØªØ§Ø±ÙØ®ÙØ© (Ø£ÙØ¶Ùا) ÙÙ ÙÙ ØªÙ Ø±ÙØ± Ø³ÙØ³ÙØ© ÙØµÙØ© ÙÙÙØ§ Ø´ÙÙØ±Ø©Ø ÙÙÙÙ٠ذÙÙ ÙÙØ³ Ø¨Ø§ÙØ£Ù ر اÙÙ Ø³ØªØØ³Ù.
delay- The delay before run, in milliseconds (1000 ms = 1 second), by default 0.
arg1,arg2â¦- ÙÙØ³Ø·Ø§Ø¡ Ø§ÙØ¯Ø§ÙØ© (ÙÙØ³Øª ٠دعÙÙ Ø© ÙÙ IE9-â)
Ø¥ÙÙÙ ÙØ°Ù Ø§ÙØ´ÙÙØ±Ø© Ø§ÙØªÙ تستدع٠âsayHi()â Ø¨Ø¹Ø¯ ثاÙÙØ©Ù ÙØ§ØØ¯Ø©:
function sayHi() {
alert('Hello');
}
setTimeout(sayHi, 1000);
٠ع اÙÙ ØªØºÙØ±Ø§Øª:
function sayHi(phrase, who) {
alert( phrase + ', ' + who );
}
setTimeout(sayHi, 1000, "Hello", "John"); // Hello, John
If the first argument is a string, then JavaScript creates a function from it.
So, this will also work:
setTimeout("alert('Hello')", 1000);
But using strings is not recommended, use arrow functions instead of them, like this:
setTimeout(() => alert('Hello'), 1000);
ÙÙØ®Ø·Ø¦ اÙ٠بر٠جÙ٠اÙ٠بتدئÙ٠أØÙاÙÙØ§ ÙÙÙØ¶ÙÙÙ٠أÙÙØ§Ø³ â()â Ø¨Ø¹Ø¯ Ø§ÙØ¯Ø§ÙØ©:
// wrong!
setTimeout(sayHi(), 1000);
ÙÙ ÙØ¹Ù ٠ذÙ٠إذ ÙØªÙÙÙØ¹ âsetTimeoutâ Ø¥Ø´Ø§Ø±Ø© Ø¥ÙÙ Ø§ÙØ¯Ø§ÙØ©Ø Ø¨ÙÙ٠ا ÙÙØ§ âsayHi()â ÙØ´ØºÙÙ Ø§ÙØ¯Ø§ÙØ© ÙÙØ§ØªØ¬ Ø§ÙØªÙÙÙØ° ÙÙ Ø§ÙØ°Ù ÙÙÙ Ø±ÙØ± Ø¥ÙÙ âsetTimeoutâ. ÙÙ ØØ§ÙØªÙØ§ ÙØ§ØªØ¬ âsayHi()â ÙÙØ³ ٠عرÙÙÙØ§ âundefinedâ (إذ ÙØ§ ØªÙØ¹Ùد Ø§ÙØ¯Ø§ÙØ© Ø´ÙØ¦Ùا)Ø ÙÙØ¹Ù٠ذÙ٠أÙ٠ع٠ÙÙØ§ Ø°ÙØ¨ سدÙÙ ÙÙÙ ÙÙØ¬Ø¯ÙÙ Ø£Ù Ø´ÙØ¡.
Ø§ÙØ¥Ùغاء Ø¨Ø§Ø³ØªØ¹Ù Ø§Ù Ø¯Ø§ÙØ© clearTimeout
ÙØ³ØªÙÙ Ù ØÙÙ ÙØ³ØªØ¯Ø¹Ù âsetTimeoutâ «ÙÙÙÙØ©Ù اÙ٠ؤÙÙØªÂ» âtimerIdâ ÙÙÙ Ù٠استع٠اÙÙØ§ ÙØ¥Ùغاء ع٠ÙÙØ© Ø§ÙØªÙÙÙØ°.
The syntax to cancel:
let timerId = setTimeout(...);
clearTimeout(timerId);
In the code below, we schedule the function and then cancel it (changed our mind). As a result, nothing happens:
let timerId = setTimeout(() => alert('never happens'), 1000);
alert(timerId); // timer identifier
clearTimeout(timerId);
alert(timerId); // same identifier (doesn't become null after canceling)
ÙÙ ÙÙ Ø£Ù ÙØ±Ù Ù Ù ÙØ§ØªØ¬ Ø§ÙØªØ§Ø¨Ùع âalertâ Ø£ÙÙ ÙÙÙÙØ© اÙ٠ؤÙÙØª (Ù٠اÙ٠تصÙÙØØ§Øª) Ù٠عدد. ÙÙ Ù٠أ٠تÙÙÙ ÙÙ Ø§ÙØ¨Ùئات Ø§ÙØ£Ø®Ø±Ù Ø£ÙÙ Ø´ÙØ¡ آخر. ÙÙ Ø«ÙÙØ§ ÙÙ Node.js ÙØ³ØªÙÙ ÙØ§Ø¦Ù ٠ؤÙÙØª ÙÙÙ ØªÙØ§Ø¨Ùع أخرÙ.
Again, there is no universal specification for these methods, so thatâs fine.
ÙÙ ÙÙ٠٠راجعة Ù ÙØ§ØµÙØ© HTML5 ÙÙ٠ؤÙÙØªØ§Øª (داخ٠اÙ٠تصÙÙØØ§Øª) ÙÙ ÙØµÙ اÙ٠ؤÙÙØªØ§Øª.
setInterval
ØµÙØ§ØºØ© Ø§ÙØ¯Ø§ÙØ© âsetIntervalâ Ù٠ذات âsetTimeoutâ:
let timerId = setInterval(func|code, [delay], [arg1], [arg2], ...)
ÙÙÙÙ٠اÙÙ ÙØ¹Ø§Ù ÙØ§Øª ذات اÙ٠عÙÙ. ÙÙÙ٠عÙÙ Ø§ÙØ¹Ùس Ù Ù âsetTimeoutâ ÙÙØ°Ø§ Ø§ÙØªØ§Ø¨Ùع ÙØ´ØºÙÙ Ø§ÙØ¯Ø§ÙØ© Ù Ø±ÙØ© ÙØ§ØØ¯Ø© Ø«Ù Ù Ø£Ø®Ø±Ù ÙØ£Ø®Ø±Ù ÙØ£Ø®Ø±Ù ØªÙØµÙÙØ§ تÙ٠اÙÙØªØ±Ø© اÙÙ ØØ¯Ùدة.
ÙÙ ÙÙ Ø£Ù ÙØ³ØªØ¯Ø¹Ù âclearInterval(timerId)â ÙÙÙÙÙÙ Ø§ÙØ§Ø³ØªØ¯Ø¹Ø§Ø¡Ø§Øª اÙÙØ§ØÙØ©.
Ø³ÙØ¹Ø±Ø¶ اÙÙ Ø«Ø§Ù Ø§ÙØ¢ØªÙ Ø§ÙØ±Ø³Ø§ÙØ© ÙÙ٠ثاÙÙØªÙÙ Ø§Ø«ÙØªÙÙØ ÙØ¨Ø¹Ø¯ خ٠س Ø«ÙØ§Ù ÙØªÙÙÙÙ ÙØ§ØªØ¬Ùا:
// repeat with the interval of 2 seconds
let timerId = setInterval(() => alert('tick'), 2000);
// after 5 seconds stop
setTimeout(() => {
clearInterval(timerId);
alert('stop');
}, 5000);
alertis shownSo if you run the code above and donât dismiss the alert window for some time, then the next alert will be shown immediately as you do it. The actual interval between alerts will be shorter than 2 seconds.
Nested setTimeout
There are two ways of running something regularly.
Ø§ÙØ£ÙÙÙ ÙÙ âsetIntervalâ. ÙØ§ÙثاÙÙØ© ÙÙ âsetTimeoutâ Ù ØªØ¯Ø§Ø®ÙØ© ÙÙØ°Ø§:
/** instead of:
let timerId = setInterval(() => alert('tick'), 2000);
*/
let timerId = setTimeout(function tick() {
alert('tick');
timerId = setTimeout(tick, 2000); // (*)
}, 2000);
ØªØ§Ø¨ÙØ¹ âsetTimeoutâ Ø£Ø¹Ùا٠ÙÙØ¬Ø¯ÙÙ Ø§ÙØ§Ø³ØªØ¯Ø¹Ø§Ø¡ Ø§ÙØªØ§ÙÙ ÙÙØØ¯Ø« بعد ÙÙØ§ÙØ© Ø§ÙØ£ÙÙ (ÙØ§ØØ¸ â(*)â).
ÙØªØ§Ø¨Ø© ØªÙØ§Ø¨Ùع âsetTimeoutâ Ù ØªØ¯Ø§Ø®ÙØ© ÙØ¹Ø·ÙÙØ§ Ø´ÙÙØ±Ø© Ù Ø·ÙØ§Ø¹Ø© Ø£ÙØ«Ø± Ù Ù âsetIntervalâ. Ø¨ÙØ°Ù Ø§ÙØ·Ø±ÙÙØ© ÙÙ Ù٠تغÙÙØ± جدÙÙØ© Ø§ÙØ§Ø³ØªØ¯Ø¹Ø§Ø¡ Ø§ÙØªØ§ÙÙ ØØ³Ø¨ ÙØ§ØªØ¬ Ø§ÙØØ§ÙÙ.
ÙÙ Ø«ÙÙØ§ عÙÙÙØ§ ÙØªØ§Ø¨Ø© خد٠ة ØªÙØ±Ø³Ù Ø·ÙØ¨ Ø¨ÙØ§Ùات Ø¥ÙÙ Ø§ÙØ®Ø§Ø¯ÙÙ ÙÙ٠خ٠س Ø«ÙØ§ÙØ ÙÙÙÙ ÙÙ ÙØ§Ù Ø§ÙØ®Ø§Ø¯ÙÙ Ù ÙØ«ÙÙÙØ§ Ø¨Ø§ÙØ¹Ù ÙÙØ§Øª ÙÙØ¬Ø¨ أ٠تزداد اÙÙØªØ±Ø© Ø¥ÙÙ 10 ÙÙÙ 20 ÙÙÙ 40 ثاÙÙØ© ÙÙÙØ°Ø§â¦
Ø¥ÙÙÙ ÙÙØ±Ø© Ø¹Ù Ø§ÙØ´ÙÙØ±Ø©:
let delay = 5000;
let timerId = setTimeout(function request() {
...send request...
if (request failed due to server overload) {
// increase the interval to the next run
delay *= 2;
}
timerId = setTimeout(request, delay);
}, delay);
And if the functions that weâre scheduling are CPU-hungry, then we can measure the time taken by the execution and plan the next call sooner or later.
ÙØªÙØ ÙÙØ§ ØªØ¯Ø§Ø®Ù Ø§ÙØªÙØ§Ø¨ÙØ¹ âsetTimeoutâ Ø¨Ø¶Ø¨Ø· اÙÙØªØ±Ø© بÙ٠ع٠ÙÙØ§Øª Ø§ÙØªÙÙÙØ° بدÙÙØ© أعÙÙ Ù Ù ÙØ§ ØªÙØ¯ÙÙ Ù âsetIntervalâ.
ÙÙØ±Ù اÙÙØ±Ù بÙÙ Ø§ÙØ´ÙÙØ±ØªÙ٠أسÙÙÙ. Ø§ÙØ£ÙÙ٠تستع٠٠âsetIntervalâ:
let i = 1;
setInterval(function () {
func(i++);
}, 100);
Ø§ÙØ«Ø§ÙÙØ© تستع٠٠âsetTimeoutâ Ù ØªØ¯Ø§Ø®ÙØ©:
let i = 1;
setTimeout(function run() {
func(i++);
setTimeout(run, 100);
}, 100);
سÙÙØ´ØºÙ٠اÙÙ ÙØ¬Ø¯ÙÙ Ø§ÙØ¯Ø§Ø®ÙÙ âfunc(i++)â ÙÙÙ 100 Ù ÙÙØ«Ø§ÙÙØ© ØØ³Ø¨ âsetIntervalâ:
Did you notice?
Ø§ÙØªØ£Ø®Ùر اÙÙØ¹Ù٠بÙ٠استدعاءات âfuncâ Ø§Ùت٠ÙÙÙÙØ°Ùا âsetIntervalâ Ø£Ù٠٠٠ا Ù٠عÙÙÙ ÙÙ Ø§ÙØ´ÙÙØ±Ø©!
ÙØ°Ø§ Ø·Ø¨ÙØ¹Ù إذ Ø£Ù٠اÙÙÙØª Ø§ÙØ°Ù ÙØ£Ø®Ø°Ù تÙÙÙØ° âfuncâ ÙØ³ØªÙÙÙ Ø¨Ø¹Ø¶ÙØ§ ٠٠تÙ٠اÙÙØªØ±Ø© Ø£ÙØ¶Ùا.
ÙÙ ÙÙ Ø£ÙØ¶Ùا Ø¨Ø£Ù ÙØµÙر تÙÙÙØ° âfuncâ Ø£Ùبر Ù Ù ÙØ§ تÙÙØ¹Ùا٠عÙÙ ØÙÙ ØºØ±ÙØ© ÙÙØ£Ø®Ø° ÙÙØªÙا أطÙÙ Ù Ù 100 Ù ÙÙØ«Ø§ÙÙØ©.
ÙÙ ÙØ°Ù Ø§ÙØØ§Ù ÙÙØªØ¸Ø± اÙÙ ØØ±ÙÙ Ø§ÙØªÙاء âfuncâ Ø«Ù Ù ÙØ±Ù اÙÙ ÙØ¬Ø¯ÙÙ: Ù٠اÙÙØ¶Ù اÙÙÙØª ÙØ´ØºÙÙ Ø§ÙØ¯Ø§ÙØ© ٠باشرةÙ.
دÙÙ ÙØ§ ٠ا تأخذ Ø§ÙØ¯Ø§ÙØ© ÙÙØªÙا أطÙÙ Ù Ù âdelayâ Ù ÙÙØ«Ø§ÙÙØ© ÙÙ ÙØ°Ù Ø§ÙØØ§ÙØ§Øª اÙÙØ§Ù Ø´ÙØ©Ø إذ ØªØ¬Ø±Ù Ø§ÙØ§Ø³ØªØ¯Ø¹Ø§Ø¡Ø§Øª ÙØ§ØØ¯Ø©Ù بعد Ø§ÙØ£Ø®Ø±Ù دÙÙ ÙÙØ§Ø¯Ø©.
ÙØ¥ÙÙÙ ØµÙØ±Ø© âsetTimeoutâ Ø§ÙÙ ØªØ¯Ø§Ø®ÙØ©:
تض٠٠âsetTimeoutâ Ø§ÙÙ ØªØ¯Ø§Ø®ÙØ© ÙÙØ§ Ø§ÙØªØ£Ø®Ùر Ø§ÙØ«Ø§Ø¨Øª (100 Ù ÙÙØ«Ø§ÙÙØ© ÙÙ ØØ§ÙØªÙØ§).
Thatâs because a new call is planned at the end of the previous one.
تÙÙØ´Ø£ إشارة داخÙÙØ© Ø¥ÙÙ Ø§ÙØ¯Ø§ÙØ© (ÙØªÙØÙظ Ù٠اÙÙ ÙØ¬Ø¯ÙÙ) Ù ØªÙ Ù Ø±ÙØ±ØªÙا Ø¥Ù٠إÙÙ âsetInterval/setTimeoutâØ ÙÙØ°Ø§ ÙÙ ÙØ¹ ÙÙØ³ Ø§ÙØ¯Ø§ÙØ© عÙ٠أÙÙÙØ§ Ù ÙÙ ÙØ§ØªØ ØØªÙÙ ÙÙ Ù٠تÙÙ ÙÙØ§Ù إشارات Ø¥ÙÙÙØ§.
// the function stays in memory until the scheduler calls it
setTimeout(function() {...}, 100);
For setInterval the function stays in memory until clearInterval is called.
ÙÙÙÙ ÙÙØ§Ù ØªØ£Ø«ÙØ± Ø¬Ø§ÙØ¨Ù ÙØ°ÙÙ ÙØ§ÙØ¹Ø§Ø¯Ø©Ø ÙØ§ÙØ¯ÙØ§Ù ØªÙØ´Ùر Ø¥ÙÙ Ø¨ÙØ¦ØªÙا اÙÙ ÙØ¹Ø¬Ù ÙØ© Ø§ÙØ®Ø§Ø±Ø¬ÙØ©. ÙØ°Ø§ طاÙ٠ا Â«ØªØ¹ÙØ´Â»Ø ØªØ¹ÙØ´ Ù Ø¹ÙØ§ اÙÙ ØªØºÙØ±Ø§Øª Ø§ÙØ®Ø§Ø±Ø¬ÙØ© Ø£ÙØ¶ÙØ§Ø ÙÙ٠أØÙاÙÙØ§ ÙØ¨Ùرة تأخذ Ø°Ø§ÙØ±Ø© Ø£ÙØ¨Ø± Ù Ù Ø§ÙØ¯Ø§ÙØ© Ø°Ø§ØªÙØ§. ÙØ°Ø§Ø ٠ت٠٠ا Ù٠ترد تÙÙ Ø§ÙØ¯Ø§ÙØ© اÙÙ ÙØ¬Ø¯ÙÙØ© ÙØ§ÙØ£ÙØ¶Ù أ٠تÙÙØºÙÙØ§ ØØªÙÙ ÙÙ ÙØ§Ùت ØµØºÙØ±Ø© Ø¬Ø¯ÙØ§.
جدÙÙØ© setTimeout Ø¨ØªØ£Ø®ÙØ± ØµÙØ±
Ø¥ÙÙÙ Ø§ÙØØ§ÙØ© Ø§ÙØ®Ø§ØµØ©: âsetTimeout(func, 0)â Ø£Ù âsetTimeout(func)â.
ÙÙØ¬Ø¯ÙÙ ÙØ°Ø§ Ø§ÙØªØ§Ø¨Ùع ÙÙØØ¯Ø« تÙÙÙØ° âfuncâ Ø¨Ø£Ø³Ø±Ø¹ ٠ا ÙÙ ÙÙØ Ø¥ÙÙØ§ أ٠اÙÙ ÙØ¬Ø¯ÙÙ ÙÙ ÙØ´ØºÙÙÙØ§ Ø¥ÙØ§ بعد Ø§ÙØªÙاء Ø§ÙØ³Ùربت Ø§ÙØ°Ù ÙØ¹Ù Ù ØØ§ÙÙÙØ§.
So the function is scheduled to run âright afterâ the current script.
عÙ٠سبÙ٠اÙ٠ثاÙ, ÙØ°Ø§ تÙÙÙ ÙØªÙجت٠âHelloâ, ث٠ÙÙØ±Ø§Ù âWorldâ:
setTimeout(() => alert('World'));
alert('Hello');
عÙÙ Ø§ÙØ³Ø·Ø± Ø§ÙØ£ÙÙ٠«ضع Ø§ÙØ§Ø³ØªØ¯Ø¹Ø§Ø¡ ÙÙ Ø§ÙØªÙÙÙÙ
بعد 0 Ù
ÙÙØ«Ø§ÙÙØ©Â»Ø Ø¥ÙÙØ§ Ø£Ù٠اÙÙ
ÙØ¬Ø¯ÙÙ ÙØ§ «ÙÙØØµ تÙÙÙÙ
Ù» Ø¥ÙÙØ§ بعد Ø§ÙØªÙاء Ø§ÙØ³Ùربت Ø§ÙØØ§ÙÙØ Ø¨ÙØ°Ø§ ØªØµÙØ± â"Hello"â Ø£ÙÙÙØ§ ÙØ¨Ø¹Ø¯Ùا تأت٠â"World"â.
Ù٠ا Ø£ÙÙ ÙÙØ§Ù Ø§Ø³ØªØ¹Ù Ø§ÙØ§Øª Ù ØªÙØ¯ÙÙ Ø© خصÙÙØµÙا ÙÙ٠تصÙÙØØ§Øª ÙÙÙ ÙÙØ© Ø¨Ø§ÙØªØ£Ø®Ùر ØµÙØ± ÙØ°ÙØ ÙØ³ÙشرØÙا Ù٠اÙÙØµÙ «ØÙÙØ© Ø§ÙØ£ØØ¯Ø§Ø«: اÙÙ ÙØ§Ù عÙ٠اÙ٠ستÙÙÙÙ Ø§ÙØ¬ÙسÙÙ Ù ÙØ§ÙذرÙÙ».
ØªØØ¯Ù اÙ٠تصÙÙØØ§Øª Ù Ù Ø§ÙØªØ£Ø®Ùر بÙ٠تشغÙ٠اÙ٠ؤÙÙØªØ§Øª اÙÙ ØªØ¯Ø§Ø®ÙØ©. تÙÙÙ Ù ÙØ§ØµÙØ© HTML5 standard HTML5: «بعد اÙ٠ؤÙÙØªØ§Øª اÙÙ ØªØ¯Ø§Ø®ÙØ© Ø§ÙØ®Ù سة Ø§ÙØ£ÙÙÙØ ØªÙØ¬Ø¨Ø± اÙÙØªØ±Ø© ÙØªÙÙ٠أربع Ù ÙÙØ«Ùا٠عÙÙ Ø§ÙØ£ÙÙ.».
ÙÙØ±Ù ٠ا ÙØ¹Ù٠ذÙÙ Ø¨ÙØ°Ø§ اÙ٠ثا٠أسÙÙÙ. ÙÙØ¹Ùد استدعاء âsetTimeoutâ Ø¬Ø¯ÙÙØ© ÙÙØ³Ù Ø¨Ù Ø¯ÙØ© ØªØ£Ø®ÙØ± تساÙÙ ØµÙØ±Ø ÙÙØªØ°ÙÙØ± Ù٠استدعاء اÙÙÙØª اÙÙØ¹Ù٠بÙÙÙ ÙØ¨Ù٠آخر استدعاء Ù٠٠صÙÙÙØ© âtimesâ. ÙÙÙÙØ ٠ا ÙÙ Ø§ÙØªØ£Ø®Ùرات اÙÙØ¹ÙÙØ©Ø ÙÙØ±Ù بأعÙÙÙØ§:
let start = Date.now();
let times = [];
setTimeout(function run() {
times.push(Date.now() - start); // remember delay from the previous call
if (start + 100 < Date.now()) alert(times); // show the delays after 100ms
else setTimeout(run); // else re-schedule
});
// an example of the output:
// 1,1,1,1,9,15,20,24,30,35,40,45,50,55,59,64,70,75,80,85,90,95,100
تع٠٠اÙ٠ؤÙÙØªØ§Øª Ø§ÙØ£ÙÙ٠٠باشرة٠(Ù٠ا تÙÙ٠اÙÙ ÙØ§ØµÙØ©)Ø ÙØ¨Ø¹Ø¯Ùا ÙØ±Ù â9, 15, 20, 24â¦â. تÙÙ Ø§ÙØ£Ø±Ø¨Ø¹ Ù ÙÙØ«ÙØ§Ù Ø§ÙØ¥Ø¶Ø§ÙÙØ© ÙÙ Ø§ÙØªØ£Ø®Ùر اÙÙ ÙØ±Ùض بÙÙ Ø§ÙØ§Ø³ØªØ¯Ø¹Ø§Ø¡Ø§Øª.
ØØªÙ٠٠ع âsetIntervalâ Ø¨Ø¯Ù âsetTimeoutâØ Ø°Ø§Øª Ø§ÙØ£Ù ر: ØªØ¹Ù Ù Ø§ÙØ¯Ø§ÙØ© âsetInterval(f)â Ø£ÙÙÙ âfâ Ù Ø±ÙØ© Ø¨Ù Ø¯ÙØ© ØªØ£Ø®ÙØ± ØµÙØ±Ø ÙØ¨Ø¹Ø¯Ùا ØªØ²ÙØ¯ أربع Ù ÙÙØ«ÙØ§Ù ÙØ¨Ø§ÙÙ Ø§ÙØ§Ø³ØªØ¯Ø¹Ø§Ø¡Ø§Øª.
سبب ÙØ¬Ùد ÙØ°Ø§ Ø§ÙØØ¯Ù ÙÙ Ù Ù Ø§ÙØ¹ØµÙر Ø§ÙØØ¬Ø±ÙØ© (٠تعÙÙØ¯Ø© داÙÙ ÙØ§) ÙØªØ¹ØªÙ د Ø´ÙÙØ±Ø§Øª ÙØ«Ùرة عÙÙ ÙØ°Ø§ Ø§ÙØ³ÙÙÙ.
For server-side JavaScript, that limitation does not exist, and there exist other ways to schedule an immediate asynchronous job, like setImmediate for Node.js. So this note is browser-specific.
Ù ÙØ®Øµ
- Methods
setTimeout(func, delay, ...args)andsetInterval(func, delay, ...args)allow us to run thefunconce/regularly afterdelaymilliseconds. - To cancel the execution, we should call
clearTimeout/clearIntervalwith the value returned bysetTimeout/setInterval. - Nested
setTimeoutcalls are a more flexible alternative tosetInterval, allowing us to set the time between executions more precisely. - Zero delay scheduling with
setTimeout(func, 0)(the same assetTimeout(func)) is used to schedule the call âas soon as possible, but after the current script is completeâ. - The browser limits the minimal delay for five or more nested calls of
setTimeoutor forsetInterval(after 5th call) to 4ms. Thatâs for historical reasons.
ÙØ§ØØ¸ بأÙÙ ØªÙØ§Ø¨Ùع Ø§ÙØ¬Ø¯ÙÙØ© ÙØ§ ØªØ¶Ù Ù Ø§ÙØªØ£Ø®Ùر Ù٠ا ÙÙ ØØ±ÙÙÙØ§.
ÙÙ Ø«ÙÙØ§ ÙÙ Ù٠أ٠تÙÙ٠٠ؤÙÙØªØ§Øª اÙ٠تصÙÙØØ§Øª أبطأ ÙØ£Ø³Ø¨Ø§Ø¨ Ø¹Ø¯ÙØ¯Ø©:
- اÙÙ Ø¹Ø§ÙØ¬ Ù ÙØ«ÙÙ Ø¨Ø§ÙØ¹Ù ÙÙØ§Øª.
- اÙ٠تصÙÙØ ÙØ¹Ù Ù ÙÙ Ø§ÙØ®ÙÙÙØ©.
- ÙØ¹Ù Ù Ø§ÙØØ§Ø³ÙØ¨ اÙÙ ØÙ Ù٠عÙÙ Ø§ÙØ¨Ø·Ø§Ø±ÙØ©.
ÙÙ ÙÙ ÙÙØ°Ø§ ÙÙÙ Ø±ÙØ¹ دÙÙØ© اÙ٠ؤÙÙØª Ø§ÙØ¯ÙÙØ§ (أ٠أدÙÙ ØªØ£Ø®ÙØ± Ù Ù ÙÙ) ÙØªØµÙر 300 Ù ÙÙØ«Ø§ÙÙØ© Ø£Ù ØØªÙ 1000 Ù ÙÙØ«Ø§ÙÙØ© ØØ³Ø¨ اÙ٠تصÙÙØ ÙØ¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§ÙØ£Ø¯Ø§Ø¡ ÙÙ ÙØ¸Ø§Ù Ø§ÙØªØ´ØºÙÙ.
Ø§ÙØªØ¹ÙÙÙØ§Øª
<code>Ø ÙÙÙÙØ«Ùر Ù Ù Ø§ÙØ³Ø·Ùر استخدÙ<pre>Ø ÙÙØ£Ùثر Ù Ù 10 Ø³Ø·ÙØ± استخد٠(plnkr, JSBin, codepenâ¦)