# Munka késleltetése a setTimeout2() és a clearTimeout2() segítségével

> A setTimeout2() segítségével egyszer futtathat egy függvényt, miután a hívások megszűntek; az azonos azonosítójú korábbi időzítőt lecseréli, és a clearTimeout2()-vel megszakíthatja.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: hu
Content-SHA256: cf08424d4f1c50e68c643256bd60d0e7554ae0e818a505283dce605b3a3df656
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

A `setTimeout2(id, callback, timeout)` egy névvel ellátott `setTimeout`. Ha az idő lejárta előtt újra meghívja **ugyanazzal az id-val**, az előző időzítő megszakad és helyébe új lép: a callback egyszer fut le, miután a hívások megszűntek. Ez a szokásos módja annak, hogy csak egyszer mentsen, töltsön újra vagy számoljon újra, amikor sok esemény érkezik együtt (változások sorozata, gépelés, üzenetáradat).

A `clearTimeout2(id)` megszakítja az adott id időzítőjét, és `true` értéket ad, ha volt ilyen, `false` értéket, ha nem.

A teljes alak `setTimeout2(id, callback, timeout, limit, a, b, c, d, e)`: a `limit` utáni értékeket a callback kapja meg. **Ne használja a `limit` paramétert** a `total5` 0.0.19 verzióban: az ötlet az, hogy a callback `limit` csere után azonnal lefusson, de a számláló sosem indul el (értéke `undefined`, majd `NaN` lesz), így a callback csak az idő lejártakor hívódik meg. A példa tízszer hívja meg 3-as limittel, és a callback nem futott le korán.

```js controllers/timers.js
exports.install = function() {
	ROUTE('GET /burst/', burst);
};

async function burst($) {

	const log = [];

	// three calls with the same id: only the last one runs
	setTimeout2('save', () => log.push('first'), 100);
	setTimeout2('save', () => log.push('second'), 100);
	setTimeout2('save', () => log.push('third'), 100);

	// a timer that is cancelled before it runs
	setTimeout2('gone', () => log.push('gone'), 100);
	const cancelled = clearTimeout2('gone');
	const nothing = clearTimeout2('never-set');

	// the values after the limit reach the callback
	setTimeout2('args', (a, b) => log.push(a + b), 50, 0, 'x', 'y');

	// the limit option does not run the callback early
	let early = 0;
	for (let i = 0; i < 10; i++)
		setTimeout2('limited', () => early++, 1000, 3);
	const stopped = clearTimeout2('limited');

	await new Promise(resolve => setTimeout(resolve, 300));
	$.json({ log: log, cancelled: cancelled, nothing: nothing, early: early, stopped: stopped });
}
```
