Как наблюдать изменение свойства, возвращаемое методом объекта

#javascript #web #reactive-programming #observable #watch

#javascript #веб #реактивное программирование #наблюдаемый #Смотреть

Вопрос:

Я работаю над системой входа в систему, и мне нужно следить, входит ли пользователь в систему / выходит. Значение, определяющее статус входа пользователя, возвращается следующим образом:

 Parse.User.current().id // returns id when logged in
Parse.User.current() // returns null when logged out
  

ожидаемая функциональность (псевдокод):

 watch( Parse.User.current().id, function (old_val, new_val) {
  console.log( 'User id has changed from: ', old_val, ' to: ', new_val );
});
// expected result: User id has changed from null to H4tn34vw0
  

Я хотел бы сохранить широкую поддержку браузера, например, ie9 . Я подумал Object.observe() , но он может просматривать свойства объекта, а не значения, возвращаемые методами, если я прав. Кроме того, использование setInterval() и проверка объекта каждую секунду могут быть не очень хорошей идеей для повышения производительности.

Ответ №1:

Вероятно, это будет работать не так, как вы ожидаете. Потому что я почти уверен, что Parse.User.current() при каждом вызове он возвращает другой объект и, по крайней мере, другой объект для каждого пользователя. И вы не можете наблюдать за изменением свойства, если свойство не изменяется, но вместо этого возвращается объект.

Создайте функцию входа и выхода и позвольте им отправлять событие при входе или выходе пользователя. Тогда у вас есть что-то, что вы можете отслеживать / наблюдать.