updatePixelBuffer(x, y) {
console.log("cleared from update", this.state.pixelRefreshTimer);
window.clearTimeout(this.state.pixelRefreshTimer);
let pixelRefreshTimer = window.setTimeout(() => {
console.log("from timer", pixelRefreshTimer);
this.triggerPixelRefresh();
}, 3000);
console.log("set timer", pixelRefreshTimer);
this.setState({
pixelRefreshTimer: pixelRefreshTimer,
});
// store operation in buffer and perform visual draw
}
triggerPixelRefresh() {
console.log("cleared from refresh", this.state.pixelRefreshTimer);
window.clearTimeout(this.state.pixelRefreshTimer);
// update data structure with operations in buffer
}
Большую часть времени updatePixelBuffer вызывается сам по себе несколько раз , так как я использую его для хранения операций рисования, прежде чем обновлять их в пакетном режиме в структуре данных, я разрешаю пользователючтобы визуализировать операции рисования в реальном времени (даже если структура данных еще не обновила их).
Моя дилемма начинается, когда я хочу вызвать triggerPixelRefresh () сразу после вызова updatePixelBuffer (x, y).Таймер не должен отключаться после этого вызова.
updatePixelBuffer(1, 2);
triggerRefresh();
Поскольку setState является асинхронным, я не знаю, как гарантировать, что window.clearTimeout в triggerPixelRefresh () очистит вновьустановить таймер в updatePixelBuffer, если они вызываются один за другим.Я не уверен, какой шаблон использовать, чтобы гарантировать это.
updatePixelRefresh устанавливает таймер так, чтобы, если triggerPixelRefresh не был вызван позже, он был вызван.Это гарантирует, что операции в буфере будут выполнены позже.triggerRefresh должен отменить этот таймер и немедленно обновить структуру данных с сохраненными операциями.Мне нужно предотвратить вызов обновления в непредсказуемое время.
Технически я мог бы просто напрямую изменить состояние, чтобы они запускались синхронно, но я бы предпочел этого не делать.