मैं कैसे प्रदर्शन करने के लिए एक सरल टॉगल आपरेशन में जावास्क्रिप्ट के साथ मदद की setInterval()?

0

सवाल

यह क्या है मेरे कोड की तरह दिखता है:

var fnInterval = setInterval(function() {
  let b = true
  if (b) {
    console.log("hi")
  } else {
    console.log("bye")
  }
  b = !b
}, 1000);

clearTimeout(fnInterval, 10000)

मैं एक नौसिखिया हूँ करने के लिए जावास्क्रिप्ट और यहाँ मेरा लक्ष्य है कंसोल लॉग में एक संदेश हर 1 सेकंड की कुल अवधि के लिए 10 सेकंड है, लेकिन के दौरान प्रत्येक अंतराल मैं चाहता हूँ कि मेरा संदेश टॉगल करने के लिए अपने मूल्य के बीच "नमस्ते" और "अलविदा" . मैं कैसे कर सकते हैं यह? (अब के रूप में यह प्रदर्शित करता है के लिए मूल्य डिफ़ॉल्ट बूलियन और परिवर्तन नहीं करता है के बाद)

javascript
2021-11-24 06:12:17
3

सबसे अच्छा जवाब

0

झंडा ले चर के समारोह:

let b = true;

const fnInterval = setInterval(function() {
    if (b) {
        console.log("hi");
    } else {
        console.log("bye");
    }
    b = !b
}, 1000);

टाइमर को रोकने के लिए के बाद 10000 मिलीसेकंड लपेटो करने के लिए कॉल clearInterval में एक setTimeout:

setTimeout(() => clearInterval(fnInterval), 10000);

इस बीच, नोट है कि के मूल्य वापसी setInterval एक समारोह में नहीं है, लेकिन एक संख्या है, तो यह गुमराह किया जा सकता है यह कॉल करने के लिए fnInterval.

2021-11-24 08:11:57
0

सब से पहले, की घोषणा let b = true के बाहर कॉलबैक समारोह । यह पुनः प्रारंभ पर प्रत्येक कॉल अन्यथा.

दूसरे, 10000 में clearTimeout(fnInterval, 10000) नहीं है एक वैध पैरामीटर । clearTimeout(timeoutId) स्वीकार करता है, केवल पहली पैरामीटर और साफ करता है मध्यांतर पारित कर दिया में तुरंत. आप की आवश्यकता होगी एक setTimeout ट्रिगर करने के लिए इस 10 सेकंड के बाद, अगर वह अपने लक्ष्य है. लेकिन कारण बनता है कि एक दौड़ की स्थिति के बीच दो समय समाप्ति -- अस्पष्टता का मतलब कर सकते हैं आप याद करेंगे के कुछ लॉग या हवा के साथ लॉग.

एक काउंटर का उपयोग कर एक समाधान है, के रूप में अन्य जवाब दिखाने के लिए, लेकिन आम तौर पर जब मैं कर रहा हूँ का उपयोग कर जटिल समय के साथ setInterval की आवश्यकता है कि यह समाशोधन के बाद कुछ पुनरावृत्तियों की संख्या, मैं refactor करने के लिए एक सामान्य promisified sleep समारोह के आधार पर setTimeout. इस रहता है, बुला कोड बहुत क्लीनर (कोई कॉलबैक) और से बचा जाता है के साथ खिलवाड़ clearTimeout.

के बजाय एक बूलियन फ्लिप करने के लिए एक ध्वज के बीच आगे और पीछे दो संदेश, एक बेहतर समाधान है करने के लिए एक सरणी का उपयोग करें और मापांक वर्तमान सूचकांक द्वारा संदेश सरणी की लंबाई. इस बनाता है यह बहुत आसान करने के लिए और अधिक आइटम जोड़ने के लिए चक्र के माध्यम से और कोड समझने के लिए आसान है के बाद से राज्य में निहित है काउंटर.

const sleep = ms => new Promise(res => setInterval(res, ms));

(async () => {
  const messages = ["hi", "bye"];
  
  for (let i = 0; i < 10; i++) {
    console.log(messages[i%messages.length]);
    await sleep(1000);
  }
})();

2021-11-24 06:17:50
0

setInterval() द्वारा बंद कर दिया है clearInterval() नहीं clearTimeout(). विवरण टिप्पणी कर रहे हैं में नीचे दिए गए कोड ।

// Define a counter
let i = 0;
// Define interval function
const fnCount = setInterval(fnSwitch, 1000);

function fnSwitch() {
  // Increment counter
  i++;
  // if counter / 2 is 0 log 'HI'
  if (i % 2 === 0) {
    console.log(i + ' HI');
    // Otherwise log 'BYE'
  } else {
    console.log(i + ' BYE');
  }
  // If counter is 10 or greater run fnStop()
  if (i >= 10) {
    fnStop();
  }
};

function fnStop() {
  // Stop the interval function fnCount()
  clearInterval(fnCount);
};

2021-11-24 06:31:05

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में