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 cfg = this.cfg;
|
||||||
const state = this.state;
|
const state = this.state;
|
||||||
|
|
||||||
if (cfg.immediateExecution) {
|
if (cfg.immediateExecution && !this.isLoading) {
|
||||||
cfg.immediateExecution = false;
|
cfg.immediateExecution = false;
|
||||||
cfg.callback();
|
this.triggerCallback();
|
||||||
}
|
}
|
||||||
|
|
||||||
state.intervalId = window.setInterval(() => {
|
state.intervalId = window.setInterval(() => {
|
||||||
cfg.callback();
|
if (this.isLoading) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.triggerCallback();
|
||||||
|
|
||||||
if (this.getCurrentInterval() === cfg.maxInterval) {
|
if (this.getCurrentInterval() === cfg.maxInterval) {
|
||||||
return;
|
return;
|
||||||
|
@ -76,7 +79,7 @@ class SmartInterval {
|
||||||
|
|
||||||
// start a timer, using the existing interval
|
// start a timer, using the existing interval
|
||||||
resume() {
|
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();
|
this.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,6 +107,17 @@ class SmartInterval {
|
||||||
this.initPageUnloadHandling();
|
this.initPageUnloadHandling();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
triggerCallback() {
|
||||||
|
this.isLoading = true;
|
||||||
|
this.cfg.callback()
|
||||||
|
.then(() => {
|
||||||
|
this.isLoading = false;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
this.isLoading = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
initVisibilityChangeHandling() {
|
initVisibilityChangeHandling() {
|
||||||
// cancel interval when tab no longer shown (prevents cached pages from polling)
|
// cancel interval when tab no longer shown (prevents cached pages from polling)
|
||||||
document.addEventListener('visibilitychange', this.handleVisibilityChange.bind(this));
|
document.addEventListener('visibilitychange', this.handleVisibilityChange.bind(this));
|
||||||
|
|
|
@ -81,7 +81,7 @@ export default {
|
||||||
return new MRWidgetService(endpoints);
|
return new MRWidgetService(endpoints);
|
||||||
},
|
},
|
||||||
checkStatus(cb) {
|
checkStatus(cb) {
|
||||||
this.service.checkStatus()
|
return this.service.checkStatus()
|
||||||
.then(res => res.json())
|
.then(res => res.json())
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
this.handleNotification(res);
|
this.handleNotification(res);
|
||||||
|
@ -121,7 +121,7 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
fetchDeployments() {
|
fetchDeployments() {
|
||||||
this.service.fetchDeployments()
|
return this.service.fetchDeployments()
|
||||||
.then(res => res.json())
|
.then(res => res.json())
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
if (res.length) {
|
if (res.length) {
|
||||||
|
|
|
@ -9,7 +9,7 @@ import '~/smart_interval';
|
||||||
|
|
||||||
function createDefaultSmartInterval(config) {
|
function createDefaultSmartInterval(config) {
|
||||||
const defaultParams = {
|
const defaultParams = {
|
||||||
callback: () => {},
|
callback: () => Promise.resolve(),
|
||||||
startingInterval: DEFAULT_STARTING_INTERVAL,
|
startingInterval: DEFAULT_STARTING_INTERVAL,
|
||||||
maxInterval: DEFAULT_MAX_INTERVAL,
|
maxInterval: DEFAULT_MAX_INTERVAL,
|
||||||
incrementByFactorOf: DEFAULT_INCREMENT_FACTOR,
|
incrementByFactorOf: DEFAULT_INCREMENT_FACTOR,
|
||||||
|
|
Loading…
Reference in a new issue