don't re-run smart interval callback if there is already one in progress
because some things take time
This commit is contained in:
parent
2087f121bf
commit
9101cce2a7
3 changed files with 21 additions and 7 deletions
|
@ -42,13 +42,16 @@ class SmartInterval {
|
|||
const cfg = this.cfg;
|
||||
const state = this.state;
|
||||
|
||||
if (cfg.immediateExecution) {
|
||||
if (cfg.immediateExecution && !this.isLoading) {
|
||||
cfg.immediateExecution = false;
|
||||
cfg.callback();
|
||||
this.triggerCallback();
|
||||
}
|
||||
|
||||
state.intervalId = window.setInterval(() => {
|
||||
cfg.callback();
|
||||
if (this.isLoading) {
|
||||
return;
|
||||
}
|
||||
this.triggerCallback();
|
||||
|
||||
if (this.getCurrentInterval() === cfg.maxInterval) {
|
||||
return;
|
||||
|
@ -76,7 +79,7 @@ class SmartInterval {
|
|||
|
||||
// start a timer, using the existing interval
|
||||
resume() {
|
||||
this.stopTimer(); // stop exsiting timer, in case timer was not previously stopped
|
||||
this.stopTimer(); // stop existing timer, in case timer was not previously stopped
|
||||
this.start();
|
||||
}
|
||||
|
||||
|
@ -104,6 +107,17 @@ class SmartInterval {
|
|||
this.initPageUnloadHandling();
|
||||
}
|
||||
|
||||
triggerCallback() {
|
||||
this.isLoading = true;
|
||||
this.cfg.callback()
|
||||
.then(() => {
|
||||
this.isLoading = false;
|
||||
})
|
||||
.catch(() => {
|
||||
this.isLoading = false;
|
||||
});
|
||||
}
|
||||
|
||||
initVisibilityChangeHandling() {
|
||||
// cancel interval when tab no longer shown (prevents cached pages from polling)
|
||||
document.addEventListener('visibilitychange', this.handleVisibilityChange.bind(this));
|
||||
|
|
|
@ -81,7 +81,7 @@ export default {
|
|||
return new MRWidgetService(endpoints);
|
||||
},
|
||||
checkStatus(cb) {
|
||||
this.service.checkStatus()
|
||||
return this.service.checkStatus()
|
||||
.then(res => res.json())
|
||||
.then((res) => {
|
||||
this.handleNotification(res);
|
||||
|
@ -121,7 +121,7 @@ export default {
|
|||
}
|
||||
},
|
||||
fetchDeployments() {
|
||||
this.service.fetchDeployments()
|
||||
return this.service.fetchDeployments()
|
||||
.then(res => res.json())
|
||||
.then((res) => {
|
||||
if (res.length) {
|
||||
|
|
|
@ -9,7 +9,7 @@ import '~/smart_interval';
|
|||
|
||||
function createDefaultSmartInterval(config) {
|
||||
const defaultParams = {
|
||||
callback: () => {},
|
||||
callback: () => Promise.resolve(),
|
||||
startingInterval: DEFAULT_STARTING_INTERVAL,
|
||||
maxInterval: DEFAULT_MAX_INTERVAL,
|
||||
incrementByFactorOf: DEFAULT_INCREMENT_FACTOR,
|
||||
|
|
Loading…
Reference in a new issue