вызов метода при изменении свойства объекта
Модератор: immortal
-
- Сообщения: 73
- Зарегистрирован: Ср авг 31, 2016 7:54 am
- Благодарил (а): 12 раз
- Поблагодарили: 1 раз
Re: вызов метода при изменении свойства объекта
Пордон но мне надо в методе на все объекты которые в этом классе, т.е. если свойство у одного из объектов меняется, то вызывается метод и меняет другое свойство этого объекта, но с задержкой по времени, если в этот интервал времени опять не попадет изменение свойства этого объекта и не произойдет опять вызов метода, то опять перезапускаем таймер.
Смысл в том, что если нужное мне свойство объекта за промежуток времени не изменится то пишем 0 в alive. Меняется за этот промежуток пишем 1. Может как по другому можно но я не в курсе.
clearTimeout("timer_live_timeout");
$this->setProperty('alive',1);
setTimeOut("timer_live_timeout", "sg('alive',0);",60);
Сильно не пинайте я не гуру в PHP, а начинающий.
Смысл в том, что если нужное мне свойство объекта за промежуток времени не изменится то пишем 0 в alive. Меняется за этот промежуток пишем 1. Может как по другому можно но я не в курсе.
clearTimeout("timer_live_timeout");
$this->setProperty('alive',1);
setTimeOut("timer_live_timeout", "sg('alive',0);",60);
Сильно не пинайте я не гуру в PHP, а начинающий.
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: вызов метода при изменении свойства объекта
пардон
Код: Выделить всё
setTimeout("timer_live_timeout", "sg('".$this->object_title.".alive',0);", 60);
-
- Сообщения: 73
- Зарегистрирован: Ср авг 31, 2016 7:54 am
- Благодарил (а): 12 раз
- Поблагодарили: 1 раз
Re: вызов метода при изменении свойства объекта
Сейчас работает но проблема в следующем допустим есть объекты а, в, с. Приходит параметр который изменяет свойство объекта а. Запускается метод в котором устанавливается alive = 1, но пока работает таймер приходит свойство объекта b и потом с. После выдержки таймера сброс происходит последнего остальные остаются alive = 1. Что то видимо я не так описал. Надо что бы после вызова метода свойством оставалась привязка таймера к такому же объекту свойство которого метод вызвало. Т.е. вызвал объект а запустился метод с таймером и при этом свойство объекта а изменилось по истечении времени независимо от других объектов и также у b и с. Как это реализовать сейчас у меня вот так:
clearTimeout("timer_live_timeout");
$this->setProperty('alive',1);
setTimeout("timer_live_timeout", "sg('".$this->object_title.".alive',0);", 60);
clearTimeout("timer_live_timeout");
$this->setProperty('alive',1);
setTimeout("timer_live_timeout", "sg('".$this->object_title.".alive',0);", 60);
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: вызов метода при изменении свойства объекта
еще один вариант
Код: Выделить всё
setTimeout($this->object_title."_timeout", "sg('".$this->object_title.".alive',0);", 60);
- За это сообщение автора olehs поблагодарил:
- Sergey2055 (Чт авг 17, 2017 3:38 pm)
- Рейтинг: 1.16%
- foxvlad
- Сообщения: 287
- Зарегистрирован: Пн сен 22, 2014 3:18 pm
- Откуда: Сочи
- Благодарил (а): 78 раз
- Поблагодарили: 78 раз
- Контактная информация:
Re: вызов метода при изменении свойства объекта
Подскажите были какие то изменения, перестал отрабатывать метод при изменении свойства.
Youtube канал - https://www.youtube.com/c/OkBitru
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: вызов метода при изменении свойства объекта
Сегодня тоже поймал ситуацию, когда не отработал метод при изменении. В истории изменение видно. А в X-Ray вызова метода нет.foxvlad писал(а):Подскажите были какие то изменения, перестал отрабатывать метод при изменении свойства.
Похоже связано с введением callMethodSafe. Но это не точно
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: вызов метода при изменении свойства объекта
Сергей, копнул я дальше и вот до чего докопался:
callMethodSafe, вызываемый при изменении свойства, использует getUrlBackground, в котором стоит таймаут запроса в 1мс.
Именно из-за такого маленького таймаута методы иногда не выполняются. Возможно, curl уходит в таймаут еще до вызова /objects (на name-resolving).
Кроме того, в режиме getUrl(background=true) прячутся все ошибки, т.е. если в метод закралась пользовательская ошибка, он о ней нигде не узнает.
Я думаю, нужно во всех *Safe - методах, как и раньше, использовать getUrl вместо getUrlBackground.
Да и обработчки ONCHANGE, по-моему, лучше вообще вызывать напрямую.
callMethodSafe, вызываемый при изменении свойства, использует getUrlBackground, в котором стоит таймаут запроса в 1мс.
Именно из-за такого маленького таймаута методы иногда не выполняются. Возможно, curl уходит в таймаут еще до вызова /objects (на name-resolving).
Кроме того, в режиме getUrl(background=true) прячутся все ошибки, т.е. если в метод закралась пользовательская ошибка, он о ней нигде не узнает.
Я думаю, нужно во всех *Safe - методах, как и раньше, использовать getUrl вместо getUrlBackground.
Да и обработчки ONCHANGE, по-моему, лучше вообще вызывать напрямую.
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: вызов метода при изменении свойства объекта
Прямой вызов плох тем, что если он "падает" из-за некорректности кода пользователя (что очень часто бывает), то "падает" и вся цепочка, в которой могут и более важные вещи выполняться, нежели конкретный ошибочный код. Насчёт того, что у curl-а срабатывает таймаут ещё до http-запроса -- такое пожалуй возможно, я как-то об этом не подумал. В общем, проблему отметил себе, постараюсь в ближайшее время подобрать решение.olehs писал(а):Сергей, копнул я дальше и вот до чего докопался:
callMethodSafe, вызываемый при изменении свойства, использует getUrlBackground, в котором стоит таймаут запроса в 1мс.
Именно из-за такого маленького таймаута методы иногда не выполняются. Возможно, curl уходит в таймаут еще до вызова /objects (на name-resolving).
Кроме того, в режиме getUrl(background=true) прячутся все ошибки, т.е. если в метод закралась пользовательская ошибка, он о ней нигде не узнает.
Я думаю, нужно во всех *Safe - методах, как и раньше, использовать getUrl вместо getUrlBackground.
Да и обработчки ONCHANGE, по-моему, лучше вообще вызывать напрямую.
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: вызов метода при изменении свойства объекта
Так а разве там нет обычного try/catch, чтобы не падало с концами?sergejey писал(а):Прямой вызов плох тем, что если он "падает" из-за некорректности кода пользователя (что очень часто бывает), то "падает" и вся цепочка, в которой могут и более важные вещи выполняться, нежели конкретный ошибочный код. Насчёт того, что у curl-а срабатывает таймаут ещё до http-запроса -- такое пожалуй возможно, я как-то об этом не подумал. В общем, проблему отметил себе, постараюсь в ближайшее время подобрать решение.
В любом случае, желательно не скрывать эти ошибки.
-
- Сообщения: 76
- Зарегистрирован: Чт фев 07, 2019 12:17 pm
- Благодарил (а): 14 раз
- Поблагодарили: 45 раз
Re: вызов метода при изменении свойства объекта
Сравнил поведение на demo версии с официального сайта и на том, что установлено у меня, при sg('HomeBridge.from_set',1); на демо версии всё отрабатывает, а у меня ничего не происходит.. даже если оставить там просто DebMes('test');
в какую сторону копать с тем, что не работает вызов метода при изменении свойства объекта?
в какую сторону копать с тем, что не работает вызов метода при изменении свойства объекта?