Połączenie setTimeout i setInterval

Połączenie setTimeout i setInterval
Krzak Piłka
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:7
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

MA
  • Rejestracja:prawie 17 lat
  • Ostatnio:9 dni
  • Postów:644
1

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

Kopiuj
setInterval(() => {
	console.log('interval');
	setTimeout(() => {
  	     console.log('timeout');
        }, 500);
}, 1000);
edytowany 3x, ostatnio: Markuz
Krzak Piłka
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:7
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ć

Kopiuj
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)
edytowany 1x, ostatnio: Patryk27
Patryk27
Pamiętaj o umieszczaniu kodu w odpowiednich znacznikach.
Neutral
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Polanów
  • Postów:151
0
Kopiuj
<div id="i0"></div>
<input type="text" id="i1" />
<input type="submit" id="i2" />
Kopiuj
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" ... .

edytowany 9x, ostatnio: Neutral
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:4 minuty
  • Postów:8423
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:

Kopiuj
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).


edytowany 1x, ostatnio: LukeJL

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.