JSFiddle - React, Tailwind, and code Playground
JavaScript
/* Pseudo-code */
var tasksByTimeoutIds = {};
task.change(function() {
var self = this;
if (self.timeoutId)
clearTaskTimeout(self.timeoutId);
self.timeoutId = setTimeout(function() {
saveTask(self);
}, 5000);
taskIdByTimeoutIds[self.timeoutId] = self;
notifyListenersOfTaskChange();
});
function clearTaskTimeout(timeoutId){
clearTimeout(timeoutId);
delete tasksByTimeoutIds[timeoutId];
}
function saveAllTasks() {
for (var timeoutId in taskIdByTimeoutIds) {
clearTaskTimeout(timeoutId);
saveTask(tasksByTimeoutIds[timeoutId]);
}
}
task.blur = saveAllTasks;
window.onbeforeunload = saveAllTasks;