setTimeout() कॉलबैक-आधारित है, async/await के साथ Promise लपेटकर सिंक्रोनस-लगने वाला स्लीप बनाएं।
बुनियादी setTimeout (नॉन-ब्लॉकिंग)
console.log("शुरू");
setTimeout(() => {
console.log("5 सेकंड बाद");
}, 5000);
console.log("तुरंत प्रिंट होता है"); // इंतजार नहीं करता
async/await स्लीप फंक्शन (अनुशंसित)
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// उपयोग
async function demo() {
console.log("शुरू");
await sleep(2000);
console.log("2 सेकंड बाद");
await sleep(1000);
console.log("1 सेकंड और बाद");
}
demo();
लूप में स्लीप
async function processWithDelay(items, delayMs) {
for (const item of items) {
console.log("प्रोसेसिंग:", item);
await sleep(delayMs);
}
console.log("पूरा हुआ");
}
processWithDelay(['A', 'B', 'C'], 1000);
ब्लॉकिंग स्लीप (नहीं करें - UI फ्रीज होता है)
// ❌ कभी न करें - इवेंट लूप ब्लॉक करता है
function blockingSleep(ms) {
const start = Date.now();
while (Date.now() - start < ms) {
// व्यस्त प्रतीक्षा - CPU 100%
}
}
चलाने का तरीका
node sleep-demo.js
आउटपुट
शुरू
2 सेकंड बाद
1 सेकंड और बाद
उपयोग के मामले
- API रेट लिमिटिंग (रिक्वेस्ट के बीच डिले)
- एनिमेशन स्टेप्स
- रीट्राय लॉजिक (एक्सपोनेंशियल बैकऑफ)
- टेस्टिंग/डीबगिंग
एक्सपोनेंशियल बैकऑफ उदाहरण
async function fetchWithRetry(url, maxRetries = 3, baseDelay = 1000) {
for (let i = 0; i <= maxRetries; i++) {
try {
const response = await fetch(url);
if (response.ok) return response.json();
throw new Error(`HTTP ${response.status}`);
} catch (error) {
if (i === maxRetries) throw error;
const delay = baseDelay * Math.pow(2, i); // 1s, 2s, 4s...
console.log(`रिट्राय ${i+1}/${maxRetries} ${delay}ms बाद...`);
await sleep(delay);
}
}
}
नोट
JavaScript में कोई बिल्ट-इन sleep() नहीं है क्योंकि यह सिंगल-थ्रेडेड है। await sleep() केवल उस async फंक्शन को रोकता है, पूरे प्रोग्राम को नहीं।