Skip to content

Commit 104f53c

Browse files
committed
docs: add new topic on creating a custom sleep function
- Added explanation of the need for a sleep function in JavaScript - Included examples demonstrating how to create a custom sleep function using Promises and async/await - Provided use cases where a sleep function is useful - Highlighted differences between blocking and non-blocking sleep implementations - Added best practices for using custom sleep functions effectively
1 parent 77378b6 commit 104f53c

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -92,3 +92,4 @@ Below is a list of our publications for easier navigation:
9292
68. [**Ինպե՞ս տեքստի մեջ որոնել և փոխել բոլոր միանման բառերը՝ օգտվելով String.prototype-ի replaceAll մեթոդից**](./publications/Exploring%20replaceAll%20for%20Effective%20String%20Operations.hy.md)
9393
69. [**2021 թվ․ մայիսի 5֊ին պաշտոնապես թողարկվեց հայտնի **CSS** ֆրեյմվորք **Bootstrap**-ի 5֊րդ ստաբիլ տարբերակը, որում վերջնականապես հրաժարվեցին **JavaScript**-ի լեգենդար **jQuery** գրադարանի օգտագործումից՝ հօգուտ «վանիլային» **JavaScript****](./publications/Bootstrap%205%20Overview%20-%20Features%20and%20Improvements.hy.md)
9494
70. [**Ֆունկցիաների ստեղծման համար JavaScript ծրագրավորման լեզվում կան մի քանի եղանակներ, որոնցից մեկը՝ Function կոնստրուկտորի օգնությամբ, օբյեկտիվ պատճառներով հազվադեպ է օգտագործվում**](./publications/Dynamically%20Generating%20Functions%20via%20Function%20Constructor.hy.md)
95+
71. [**Մի շարք հանրաճանաչ ծրագրավորման լեզուներում (օրինակ՝ Java, Python, Ruby) գոյություն ունեն կոդի կատարումը ժամանակավորապես արգելակող հատուկ ֆունկցիաներ/մեթոդներ։ (_Սովորաբար այդպիսի ֆունկցիան/մեթոդը անվանում են sleep_): JavaScript-ում այդպիսի ներդրված ֆունկցիա դեռևս չկա, սակայն հնարավոր է ստեղծել՝ ընդ որում բազմաթիվ տարբեր եղանակներով**](./publications/Custom%20Sleep%20Function%20in%20JavaScript.hy.md)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
Մի շարք հանրաճանաչ ծրագրավորման լեզուներում (_օրինակ՝ Java, Python, Ruby_) գոյություն ունեն կոդի կատարումը ժամանակավորապես արգելակող հատուկ ֆունկցիաներ/մեթոդներ։ (_Սովորաբար այդպիսի ֆունկցիան/մեթոդը անվանում են sleep_): **JavaScript**-ում այդպիսի ներդրված ֆունկցիա դեռևս չկա, սակայն հնարավոր է ստեղծել՝ ընդ որում բազմաթիվ տարբեր եղանակներով։
2+
3+
_setTimeout_ ֆունկցիայի ուղղակի օգտագործման միջոցով հնարավոր չէ այդպիսի ֆունկցիոնալություն ապահովել, քանի֊որ այն ասինխրոն է աշխատում։ Օրինակ փորձենք կոնսոլում աշխատեցնել հետևյալ կոդը՝
4+
5+
```js
6+
console.log("start");
7+
setTimeout(() => console.log("sleep for 3 seconds"), 3000);
8+
console.log("continue");
9+
```
10+
11+
Արդյունքը կլինի՝
12+
13+
1. start
14+
2. continue
15+
3. sleep for 3 seconds // կոդի գործարկումից 3 վայրկյան հետո
16+
17+
Իհարկե կարելի է _setTimeout_ ֆունկցիան «փաթեթավորել» _Promise_-ների մեջ, և օգտվելով _ES8_-ում ներդրված _async await_ սինթաքսիսից, գրել շատ գեղեցիկ ֆունկցիա, որը կապահովեր կոդի «քնի ռեժիմը», սակայն **JavaScript** ծրագրավորման լեզվի գեղեցկությունը հենց նրա մեջ է, որ այն թույլ է տալիս պարզ բաներն անել պարզ կերպով։
18+
19+
_sleep_ ֆունկցիան ստեղծելու համար մեզ անհրաժեշտ է օգտագործել ընդամենը _Date_ ներդրված օբյեկտը և _do while_ ցիկլը։ Ֆունկցիան կունենա հետևյալ տեսքը՝
20+
21+
```js
22+
function sleep(milliseconds) {
23+
console.log(`Sleeping for ${milliseconds / 1000} seconds`);
24+
25+
const startDate = Date.now();
26+
let currentDate;
27+
28+
do {
29+
currentDate = Date.now();
30+
} while (currentDate - startDate < milliseconds);
31+
}
32+
```
33+
34+
Այժմ փորձենք կատարել վերևում բերված օրինակը՝ այս անգամ օգտվելով մեր ստեղծած sleep ֆունկցիայից։
35+
36+
```js
37+
console.log("start");
38+
sleep(3000);
39+
console.log("continue");
40+
```
41+
42+
Արդյունքը կլինի՝
43+
44+
1. start
45+
2. sleep for 3 seconds
46+
3. continue
47+
48+
Ֆունկցիան լավ է աշխատում, սակայն ունի նաև թերություն։ Այն ծրագրի կատարման հոսքը կանգնեցնում է ցիկլի աշխատանքի միջոցով և երաշխավորում է, որ ոչ մի այլ տիպի փոխազդեցություն ծրագրի հետ սկզբունքորեն հնարավոր չէ։ Եթե մեզ անհրաժեշտ լինի ծրագրի կատարման շատ ավելի մեծ ընդհատում՝ բացառված չէ, որ ծրագրի կատարումը կարող է ընդհանրապես խափանվել։
49+
50+
Եվ ևս մի տարբերակ, այս անգամ օգտագործելով վերոհիշյալ async await սինթաքսը։
51+
52+
```js
53+
async function sleep(milliseconds) {
54+
return new Promise((resolve) => setTimeout(resolve, milliseconds));
55+
}
56+
57+
async function run() {
58+
console.log("Starting...");
59+
await sleep(2000); // Sleep for 2 seconds
60+
console.log("Slept for 2 seconds");
61+
}
62+
63+
run();
64+
```

0 commit comments

Comments
 (0)