У меня есть требование к таймеру, который должен отправлять уведомление (я использую уведомление oneignal API) после достижения определенного пользователем значения.
Например, если пользователь устанавливает значение 7 минут , таймер должен отправить уведомление через 7 минут. Время, которое может установить пользователь, варьируется от 1 до 59 минут. Но даже с использованием плагина фонового режима (https://github.com/katzer/cordova-plugin-background-mode) я не могу заставить функции setInterval / setTimeout работать через 5 минут.
Пробовал использовать рекурсивный метод setTimeout:
function startTimerCounter() {
this.timerCounter = 0;
const objThis = this; //store this.
if (this.timerCounter >= this.setTime) {
this.backgroundMode.disable();
this.goalTimerReached = true;
} else {
this.backgroundMode.enable();
this.timer = setTimeout(function request() {
if (objThis.timerCounter === objThis.setTime) {
//onesignal notification
clearTimeout(objThis.timer);
} else {
++objThis.timerCounter;
objThis.timer = setTimeout(request, 1000);
}
}, 1000);
}
}
Пробовал использовать метод setInterval:
function startTimerCounter() {
this.timerCounter = 0;
const objThis = this; //store this.
if (this.timerCounter >= this.setTime) {
this.backgroundMode.disable();
this.goalTimerReached = true;
} else {
this.backgroundMode.enable();
this.timerCounter = 0;
const objThis = this; //store this.
this.timer = setInterval(() => {
if (objThis.timerCounter === objThis.setTime) {
//onesignal notification
clearInterval(objThis.timer);
} else {
++objThis.timerCounter;
}
}, 1000);
}
}
Уведомление об активации фона вверху, и я вижу, что фоновый режим активен. Но таймер, похоже, не запускается через 5 минут.
есть идеи, как это можно решить?
*** Обновление ****
Пытался вызывать функцию каждые 4 минуты в фоновом режиме, чтобы продолжить работу, что у меня не сработало:
function startTimerCounter() {
this.timerCounter = 0;
const objThis = this; //store this.
if (this.timerCounter >= this.setTime) {
this.backgroundMode.disable();
this.goalTimerReached = true;
} else {
this.backgroundMode.enable();
this.timerCounter = 0;
const objThis = this; //store this.
this.timer = setInterval(() => {
if (objThis.timerCounter === objThis.setTime) {
//onesignal notification
clearInterval(objThis.timer);
} else {
++objThis.timerCounter;
}
}, 1000);
this.backgroundMode.on('activate').subscribe(() => {
setInterval(function () {
this.startTimerCounter();
}, 240000);
})
}
}