ForgeTotal.js 5
ro

Total.js 5

Amână lucrul cu setTimeout2() și clearTimeout2()

Total.js 5 · total5@0.0.19 timersdebounceutilities Executată cu Total.js 5

setTimeout2(id, callback, timeout) este setTimeout cu un nume. Când îl apelezi din nou cu același id înainte să treacă timpul, temporizatorul anterior este anulat și înlocuit: callbackul rulează o dată, după ce apelurile încetează. Este modul obișnuit de a salva, reîncărca sau recalcula o singură dată când multe evenimente sosesc împreună (o rafală de modificări, tastarea, un val de mesaje).

clearTimeout2(id) anulează temporizatorul acelui id și returnează true când exista unul și false când nu exista.

Forma completă este setTimeout2(id, callback, timeout, limit, a, b, c, d, e): valorile de după limit sunt trecute callbackului. Nu folosi limit în total5 0.0.19: ideea este să ruleze callbackul imediat după limit înlocuiri, dar contorul nu pornește niciodată (este undefined și devine NaN), deci callbackul este apelat doar când timpul s-a terminat. Exemplul îl apelează de zece ori cu o limită de 3 și callbackul nu a rulat mai devreme.

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 });
}