ยังไงฉันแสดงง่ายๆเปิด/ปิดการแสดงปฏิบัติการอยู่ในจาวาสคริปต์ด้วยความช่วยเหลือขอ setInterval()?

0

คำถาม

นี่คือสิ่งที่ฉันรหัสดูเหมือนว่า:

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

clearTimeout(fnInterval, 10000)

ฉันเป็น newbie ต้องและจาวาสคริปต์ของฉันเล็งมาที่นี่คือต้องคอนโซลปูมบันทึกข้อความทุก 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 ไม่ใช่ฟังก์ชั่นแต่เป็นจำนวนดังนั้นมันอาจจะเป็น misleading เรียกมัน fnInterval.

2021-11-24 08:11:57
0

อย่างแรกประกาศ let b = true ออกไปข้างนอกเรียกกลับฟังก์ชัน. มันเป็นส่สามารถใช้ถอบกันและโทรหาอีกอย่าง

อย่างที่สองที่ใน 10000 clearTimeout(fnInterval, 10000) ไม่ใช่ที่ถูกต้องพารามิเตอร์. clearTimeout(timeoutId) ยอมรับเพียงคนแรกพารามิเตอร์และล้างหมดเวลาผ่านไปในทันที คุณต้องการ setTimeout เพื่อกระตุ้นนี้หลังจาก 10 วินาทีถ้านั่นเป็นของคุณเป้าหมาย. แต่นั่นทำให้การแข่งขันสภาพระหว่างสองคน timeouts--imprecision ได้หมายความว่าคุณจะคิดถึงบางอย่างของปูมบันทึกหรือบลงกับพิเศษปูมบันทึก.

ใช้เคาน์เตอร์คือหนึ่งแก้ปัญหาเช่นกันคำตอบแสดงแต่ปกติแล้วตอนที่ฉันกำลังใช้ซับซ้อนเวลากับ setInterval นั่นต้องการเคลียร์มันหลังจากที่มีจำนวนของการทำซ้ำฉัน refactor ต้องเป็นทั่วไป promisified sleep ฟังก์ชันจากพื้นฐาน setTimeout. วิธีนี้จะทำให้เรียกรหัสมากเครื่องมือทำความสะอาด(ไม่มีคอลแบก)และ avoids วุ่นวายกับ clearTimeout.

แทนที่จะเป็นค่าตรรกะที่จะพลิกภาพธงกลับมาและไว้ระหว่างสองข้อความที่ดีกว่านี้คือทางออกเพื่อใช้เป็นอาเรย์และ modulus ดัชนีปัจจุบันโดยข้อความตารางคู่ลำดับความยาว. มันทำให้มันง่ายมากเลยที่จะเพิ่มรายการที่จะลงตรวจดูและรหัสมันง่ายกว่าที่จะเข้าใจตั้งแต่ของรัฐคือที่แยกกำหนดอยู่ในรยืมมาที่เคาท์เตอร์

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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่