Страница 2 из 6
Re: вызов метода при изменении свойства объекта
Добавлено: Чт авг 17, 2017 8:12 am
Sergey2055
Пордон но мне надо в методе на все объекты которые в этом классе, т.е. если свойство у одного из объектов меняется, то вызывается метод и меняет другое свойство этого объекта, но с задержкой по времени, если в этот интервал времени опять не попадет изменение свойства этого объекта и не произойдет опять вызов метода, то опять перезапускаем таймер.
Смысл в том, что если нужное мне свойство объекта за промежуток времени не изменится то пишем 0 в alive. Меняется за этот промежуток пишем 1. Может как по другому можно но я не в курсе.
clearTimeout("timer_live_timeout");
$this->setProperty('alive',1);
setTimeOut("timer_live_timeout", "sg('alive',0);",60);
Сильно не пинайте я не гуру в PHP, а начинающий.
Re: вызов метода при изменении свойства объекта
Добавлено: Чт авг 17, 2017 1:37 pm
olehs
пардон
Код: Выделить всё
setTimeout("timer_live_timeout", "sg('".$this->object_title.".alive',0);", 60);
Re: вызов метода при изменении свойства объекта
Добавлено: Чт авг 17, 2017 2:37 pm
Sergey2055
Сейчас работает но проблема в следующем допустим есть объекты а, в, с. Приходит параметр который изменяет свойство объекта а. Запускается метод в котором устанавливается 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);
Re: вызов метода при изменении свойства объекта
Добавлено: Чт авг 17, 2017 3:28 pm
olehs
еще один вариант
Код: Выделить всё
setTimeout($this->object_title."_timeout", "sg('".$this->object_title.".alive',0);", 60);
Re: вызов метода при изменении свойства объекта
Добавлено: Пт сен 08, 2017 5:38 pm
foxvlad
Подскажите были какие то изменения, перестал отрабатывать метод при изменении свойства.
Re: вызов метода при изменении свойства объекта
Добавлено: Пн сен 11, 2017 8:12 pm
olehs
foxvlad писал(а):Подскажите были какие то изменения, перестал отрабатывать метод при изменении свойства.
Сегодня тоже поймал ситуацию, когда не отработал метод при изменении. В истории изменение видно. А в X-Ray вызова метода нет.
Похоже связано с введением callMethodSafe. Но это не точно

Re: вызов метода при изменении свойства объекта
Добавлено: Вт сен 12, 2017 12:58 am
olehs
Сергей, копнул я дальше и вот до чего докопался:
callMethodSafe, вызываемый при изменении свойства, использует getUrlBackground, в котором стоит таймаут запроса в 1мс.
Именно из-за такого маленького таймаута методы иногда не выполняются. Возможно, curl уходит в таймаут еще до вызова /objects (на name-resolving).
Кроме того, в режиме getUrl(background=true) прячутся все ошибки, т.е. если в метод закралась пользовательская ошибка, он о ней нигде не узнает.
Я думаю, нужно во всех *Safe - методах, как и раньше, использовать getUrl вместо getUrlBackground.
Да и обработчки ONCHANGE, по-моему, лучше вообще вызывать напрямую.
Re: вызов метода при изменении свойства объекта
Добавлено: Вт сен 12, 2017 10:24 am
sergejey
olehs писал(а):Сергей, копнул я дальше и вот до чего докопался:
callMethodSafe, вызываемый при изменении свойства, использует getUrlBackground, в котором стоит таймаут запроса в 1мс.
Именно из-за такого маленького таймаута методы иногда не выполняются. Возможно, curl уходит в таймаут еще до вызова /objects (на name-resolving).
Кроме того, в режиме getUrl(background=true) прячутся все ошибки, т.е. если в метод закралась пользовательская ошибка, он о ней нигде не узнает.
Я думаю, нужно во всех *Safe - методах, как и раньше, использовать getUrl вместо getUrlBackground.
Да и обработчки ONCHANGE, по-моему, лучше вообще вызывать напрямую.
Прямой вызов плох тем, что если он "падает" из-за некорректности кода пользователя (что очень часто бывает), то "падает" и вся цепочка, в которой могут и более важные вещи выполняться, нежели конкретный ошибочный код. Насчёт того, что у curl-а срабатывает таймаут ещё до http-запроса -- такое пожалуй возможно, я как-то об этом не подумал. В общем, проблему отметил себе, постараюсь в ближайшее время подобрать решение.
Re: вызов метода при изменении свойства объекта
Добавлено: Вт сен 12, 2017 10:40 am
olehs
sergejey писал(а):Прямой вызов плох тем, что если он "падает" из-за некорректности кода пользователя (что очень часто бывает), то "падает" и вся цепочка, в которой могут и более важные вещи выполняться, нежели конкретный ошибочный код. Насчёт того, что у curl-а срабатывает таймаут ещё до http-запроса -- такое пожалуй возможно, я как-то об этом не подумал. В общем, проблему отметил себе, постараюсь в ближайшее время подобрать решение.
Так а разве там нет обычного try/catch, чтобы не падало с концами?
В любом случае, желательно не скрывать эти ошибки.
Re: вызов метода при изменении свойства объекта
Добавлено: Вт фев 12, 2019 2:20 pm
London
Сравнил поведение на demo версии с официального сайта и на том, что установлено у меня, при sg('HomeBridge.from_set',1); на демо версии всё отрабатывает, а у меня ничего не происходит.. даже если оставить там просто DebMes('test');
в какую сторону копать с тем, что не работает вызов метода при изменении свойства объекта?