Połączenie setTimeout i setInterval

0

Idzie jakoś połaczyć te 2 rzeczy.Rozchodzi się o to żeby funckcja działa cyklicznie co 100ms za co odpowiada setInterval a wysyłała dopiero po 2sek jeśli zobaczy słowo klucz. Pozdrawiam

1

Można. Wystarczy w setInterval wywołać setTimeout.

setInterval(() => {
	console.log('interval');
	setTimeout(() => {
  	     console.log('timeout');
        }, 500);
}, 1000);
0

dalej nie wiem jak to zrobić gdzie to wstawić żeby po 2 sek klikało przycisk wyślij wiadomość i cyklicznie funkcja się odnawiała żeby na natepną wiadomość tez odpowiedziała umiałys to tutaj wstawić

var msg = "";
var rep = "Siema";

function Und() {
var messages = document.querySelectorAll("czat ostatnia wiadomosc");
var newest = messages[messages.length-1].innerHTML;
if(newest == msg) {
return;
}
msg = newest;
if(msg.includes("siema") | msg.includes("elo") | msg.includes("witam") | msg.includes("joł") | msg.includes("elko")) {
document.querySelector("wiadomosc na czacie").value = rep;
document.querySelector("przycisk wyslij wiadomosc").click();
}

}

setInterval(Und, 100)
0
<div id="i0"></div>
<input type="text" id="i1" />
<input type="submit" id="i2" />
var gate = 1;

document.addEventListener('keydown', function(e) {

	if(e.key === 'Enter' && document.activeElement === document.getElementById('i1') && gate === 1) {
		
		var span = document.createElement('div');
		
		span.textContent = document.getElementById('i1').value;
		
		document.getElementById('i0').appendChild(span);
	
		var i0 = document.getElementById('i0').childNodes;

		var message_last = i0[i0.length-1].textContent;

		if(message_last === "hello" || message_last === "good evening") {
			gate = 0;
			setTimeout(function() {
				var span = document.createElement('div');
				
				span.textContent = "welcome";
				span.style.color = 'green';
				span.style.background = 'grey';
				
				document.getElementById('i0').appendChild(span);
				gate = 1;
			}, 2000);
		}
		
	}
}, false);

51 minut temu
Krzak Piłka

Siemanko dzięki za odpowiedź niestety ja jeszcze początkujace i mógłbyś tylko powiedzieć gdzie te swoje dane z nawiasów mam wrzucić oraz taki error w 3 linijce (Uncaught SyntaxError: Unexpected token < on line 3) wyksakuje pozdrawiam

Jeśli możesz to pisz tutaj na forum, a nie do mnie wiadomość prywatną (private).

Może zostawiłeś jakiś niespodziewany dla interpretera znak np. "<" w kodzie, wyrzuć go i powinno być OK. Zmodyfikowałem dwie linie kodu, teraz wystarczy, że dopiszesz np. ... || message_last === "good noon" ... .

0

Twój czat?
Czy może podpinasz się pod istniejącą aplikację / korzystasz z jakiejś gotowej biblioteki, nad którą nie masz kontroli?

Bo to co piszesz to jakaś wielka hakerka, ale może nie masz innej możliwości (jeśli próbujesz się whakować do istniejącego rozwiązania).

No ale jeżeli to twój czat / masz kontrolę nad kodem, to teksty wiadomości powinny być trzymane w jakichś zmiennych/obiektach/tablicach/whatever, i z nich wyciągane.

A tutaj widzę, że tekst czatu trzymasz sobie w DOM i wyciągasz prosto z niego:

var messages = document.querySelectorAll("czat ostatnia wiadomosc");
var newest = messages[messages.length-1].innerHTML;

takie podejście na dłuższą metę nie jest wygodne, bo uzależnia dane od sposobu wyświetlania ich (w drzewku DOM), poza tym odwołania do DOM bez potrzeby mogą potencjalnie zmniejszyć wydajność apki.

Wiem, że to nie rozwiązuje problemu z setTimeout/setInterval, ale być może sam sposób w jaki to próbujesz rozwiązać jest błędny (ale ciężko o tym zdecydować bez kontekstu, co robisz, czy się whakowujesz do czegoś, czy robisz coś od zera).

1 użytkowników online, w tym zalogowanych: 0, gości: 1