У меня есть одна функция checkEvery15Seconds
это работает каждые 15 секунд. Это проверяет, чтобы видеть, были ли новые комментарии добавлены к странице.
У меня есть форма, которая отправляет новый комментарий, после того как кнопка отправки нажимается, затем отображает новый комментарий к странице.
В процессе добавления нового комментария checkEvery15Seconds
запрашивает базу данных одновременно, таким образом, я заканчиваю с дубликатом, комментирует страницу (не в базе данных, хотя, это - просто проблема JavaScript).
Как я могу заставить свою функцию "submitComment" останавливаться checkEvery15Seconds
и перезапустите его после того, как функция "submitComment" закончит выполняться?
добавить логическое значение под названием some suspend15sCheck в область, доступную для обеих функций. включите его при добавлении комментария, а затем снова установите для него значение false.
в вашей функции 15sCheck сначала необходимо проверить, разрешено ли вам проверять: -)
var suspend15sCheck = false;
function addComment()
{
suspend15sCheck = true;
// add comment on base of form data
suspend15sCheck = false;
}
function myTimer()
{
if(suspend15sCheck === false)
{
// add comments via ajax request
// remember to check if the comments who will be added already exist :-)
}
}
Вам понадобится переменная состояния, чтобы указать текущее состояние запроса ajax комментария
var requestComments = false;
if(requestComments === false) {
requestComments = true;
// make ajax request
// on ajax success/fail
requestComments = false;
}
Оберните его в объект, который позволяет другим функциям устанавливать на нем флаги запуска / остановки.
function My15SecondsObj() {
var objSelf = this;
//
this.run();
}
My15SecondsObj.Paused = false;
My15SecondsObj.prototype.run= function() {
if (!Paused)
{
// Do your call here
}
var _this = this;
setTimeout(function() { _this.run(); }, 15000);
}
Теперь, когда вы хотите использовать этот объект, просто сделайте
var myObj = new My15SecondsObj();
, а когда вы захотите приостановить его,
myObj.Paused = true;
и запустите его снова, выполнив:
myObj.Paused = false;
Добавьте несколько событий, если вы действительно хотите сходить с ума, поэтому что другие объекты могут подписаться на уведомления об успешном обновлении базы данных и т. д.
Простейшее решение: используйте переменную пометки, которую вы включаете и выключаете. Первая строка вашей функции "checkEvery15Seconds" гласит: if (! Global_checkingEvery15Seconds) return;
Просто установите для этой переменной (как бы вы ее ни называли, глобальной или привязанной к объекту) значение true, когда вы хотите, чтобы проверка была включена, и выключайтесь, когда вы этого не сделаете.