no.js: como usar setInterval e clearInterval?

Este é o meu JS em nodeJS.
function test(a, room, seconds) {
    console.log(a, room, seconds);
}

intervalid = setInterval(test, 1000, 'room', 20);
console.log('intervalid', intervalid);

o que me devolve o resultado:

intervalid Timeout {
    _called: false,
    _idleTimeout: 1000,
    _idlePrev: TimersList {
        _idleNext: [Circular],
        _idlePrev: [Circular],
        _timer: Timer { '0': [Function: listOnTimeout], _list: [Circular] },
        _unrefed: false,
        msecs: 1000,
        nextTick: false
    },
    _idleNext: TimersList {
        _idleNext: [Circular],
        _idlePrev: [Circular],
        _timer: Timer { '0': [Function: listOnTimeout], _list: [Circular] },
        _unrefed: false,
        msecs: 1000,
        nextTick: false
    },
    _idleStart: 377,
    _onTimeout: [Function: test],
    _timerArgs: [ 'room', 20 ],
    _repeat: 1000
}

Considerando que em Javascript simples ele retorna um número inteiro Simples

Quando anexo o intervalo a um objecto de utilizador existente, por exemplo:

user.intervalid = setInterval(test, 1000, 'room', 20);

já não sou capaz de desimpedir o intervalo:

clearInterval(user.intervalid); // does not work
 3
Author: Ghassen Louhaichi, 2017-10-05

3 answers

Usar o setInterval()

E se precisar de repetir a execução do seu bloco de código a intervalos especificados? Para isso, Node tem métodos chamados setInterval () e clearInterval (). A função setInterval () é muito parecida com setTimeout (), usando os mesmos parâmetros como a função callback, delay, e quaisquer argumentos opcionais para passar para a função callback.

Um exemplo simples de setInterval() aparece abaixo:

var interval = setInterval(function(str1, str2) {
  console.log(str1 + " " + str2);
}, 1000, "Hello.", "How are you?");

clearInterval(interval);
Isto é outra maneira quando você quer manter apenas um intervalo em execução a cada minuto
function intervalFunc() {
    console.log("Hello!!!!");
     }
    setInterval(intervalFunc,1500);

No exemplo acima, o intervalFunc () irá executar cerca de 1500 milisegundos, ou 1,5 segundos, até que seja parado . Espero que isto ajude.

 8
Author: Syed Ayesha Bebe, 2017-10-06 05:53:30

Pode usar "isto" no seguinte exemplo:

const dgram = require('dgram');
const message = Buffer.from('from raspberry pi 3');
const client = dgram.createSocket('udp4');
var count = 0;

function intervalFunc() {
  count++;
  client.send(message, 3001, 'localhost', (err) => {
    //client.close();
  });
  if (count == '5') {
    clearInterval(this);
  }
}
setInterval(intervalFunc, 1500);
 0
Author: farshad-nsh, 2018-04-05 07:16:29
Isto apanhou-me. Exactamente o mesmo cenário, a clearInterval simplesmente não estava a funcionar. {[[2]} olhando no console, o resultado do setInterval foi um objeto, não um número. Estava muito confuso. A solução era remover esta declaração de importação, que tinha entrado sorrateiramente:

import { setInterval } from 'timers';

 0
Author: FTWinston, 2018-09-27 22:17:13