我如何执行一个简单的切换操作JavaScript的帮助的若第()?

0

的问题

这是什么我的代码看起来像:

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

clearTimeout(fnInterval, 10000)

我是个新手JavaScript和我来这里的目的是控制台:记录的消息,每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 这就需要清除后,一些数量的迭代,我重构为一般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ý
..................................................................................................................