Duvida em um codigo

Olá, eu comecei a programar agora e escolhi javascript.

Eu estou treinando algumas coisas, e decidi criar uma array e usei o comando for para percorrer essa array, só que eu coloquei a função setInterval e não esta funcionando da maneira que eu gostaria.

for(let pos in num) {
	const time = setInterval(() => {console.log(`foi encontrado o numero ${num[pos]}`)}, 3000);
}

em vez dele retornar um de cada vez em 3s ele ta retornando todos de uma vez em 3s. e quando eu coloco um “return time” ele até retornar a cada 3s, mas retorna só o numero 1, ele n anda o array.

Alguém poderia me esclarecer onde eu estou errando ? e me dar umas dicas?

Apenas para esclarecer, os setIntervals criados nesse for irão executar o código a cada 3s (nesse seu exemplo), pois, uma vez iniciados, não são finalizados (com o uso do clearInterval.

O valor retornado para a variável time é como se fosse o identificador do interval que será executado e é esse valor que é usado na função clearInterval para parar a execução, senão vai executar pra sempre a cada 3s. Veja:

// inicia a execução em intervalos de 3s
const time = setInterval(() => {
	console.log(`foi encontrado o numero ${num[pos]}`)
}, 3000);

// logo após a criação, já finaliza sua execução
clearInterval(time);

E a execução do intervalo é paralelo mesmo, uma não irá esperar a outra finalizar para iniciar a execução.

1 curtida

mas não existe nenhum jeito de fazer esperar a outra finalizar para iniciar a execução? uma de cada vez.

Tem assim:

for(let pos in num) {
	console.log(`foi encontrado o numero ${num[pos]}`);
}

Pq vc precisa do setInteval nesse caso? Uma alternativa seria encadear as execuções com Promise.

é só por curiosidade msm, estou tentando unir uma função com a outra para ver como fica. como eu disse, estou aprendendo agora javascript ai quero ficar testando essas coisas até aprender de fato.

1 curtida